{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step 1: Read the file\n",
      "['Proto,SrcAddr,DstAddr,Dport', 'tcp,93.45.239.29,147.32.84.118,6881', 'tcp,62.240.166.118,147.32.84.229,13363', 'tcp,147.32.86.148,66.235.132.232,80', 'tcp,147.32.3.51,147.32.84.46,10010', 'tcp,88.212.37.169,147.32.84.118,6881', 'tcp,94.44.60.103,147.32.84.118,6881', 'tcp,2.159.127.100,147.32.84.118,6881', 'tcp,213.233.154.219,147.32.84.229,13363', 'tcp,88.212.37.169,147.32.84.118,6881', 'tcp,95.210.161.212,147.32.84.118,6881', 'tcp,94.44.60.103,147.32.84.118,6881', 'tcp,85.132.162.9,147.32.84.118,6881', 'tcp,88.212.37.169,147.32.84.118,6881', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,94.44.60.103,147.32.84.118,6881', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,147.32.84.118,203.23.120.136,6881', 'tcp,122.174.15.39,147.32.84.2,80', 'tcp,85.132.162.9,147.32.84.118,6881', 'tcp,122.174.15.39,147.32.84.2,80', 'tcp,188.112.125.201,147.32.84.118,6881', 'tcp,122.174.15.39,147.32.84.2,80', 'tcp,122.174.15.39,147.32.84.2,80', 'tcp,122.174.15.39,147.32.84.2,80', 'tcp,212.201.86.130,147.32.84.118,6881', 'tcp,2.159.25.101,147.32.84.118,6881', 'tcp,147.32.84.118,203.23.120.136,6881', 'tcp,188.112.125.201,147.32.84.118,6881', 'tcp,173.242.220.227,147.32.86.165,80', 'tcp,173.242.220.227,147.32.86.165,80', 'tcp,173.242.220.227,147.32.86.165,443', 'tcp,173.242.220.227,147.32.86.165,80', 'tcp,173.242.220.227,147.32.86.165,443', 'tcp,173.242.220.227,147.32.86.165,80', 'tcp,173.242.220.227,147.32.86.165,12114', 'tcp,173.242.220.227,147.32.86.165,443', 'tcp,173.242.220.227,147.32.86.165,80', 'tcp,173.242.220.227,147.32.86.165,12114', 'tcp,147.32.84.118,203.23.120.136,6881', 'tcp,173.242.220.227,147.32.86.165,443', 'tcp,173.242.220.227,147.32.86.165,12114', 'tcp,173.242.220.227,147.32.86.165,443', 'tcp,173.242.220.227,147.32.86.165,80', 'tcp,173.242.220.227,147.32.86.165,12114', 'tcp,212.201.86.130,147.32.84.118,6881', 'tcp,188.112.125.201,147.32.84.118,6881', 'tcp,212.201.86.130,147.32.84.118,6881', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,147.32.84.118,203.23.120.136,6881', 'tcp,147.32.84.118,203.23.120.136,6881', 'tcp,213.233.154.226,147.32.84.229,13363', 'tcp,95.153.189.22,147.32.84.229,80', 'tcp,147.32.85.124,77.75.73.9,80', 'tcp,122.174.15.39,147.32.84.2,80', 'tcp,122.174.15.39,147.32.84.2,80', 'tcp,92.40.253.219,147.32.84.229,13363', 'tcp,92.40.253.219,147.32.84.229,443', 'tcp,92.40.253.219,147.32.84.229,80', 'tcp,173.242.220.227,147.32.86.165,12114', 'tcp,173.242.220.227,147.32.86.165,443', 'tcp,178.255.217.104,147.32.84.118,6881', 'tcp,193.6.144.62,147.32.84.118,6881', 'tcp,147.32.3.51,147.32.87.22,10010', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,147.32.3.51,147.32.84.46,10010', 'tcp,147.32.84.59,77.78.99.22,80', 'tcp,147.32.84.59,77.78.99.22,80', 'tcp,147.32.84.59,77.78.99.22,80', 'tcp,147.32.3.51,147.32.84.46,10010', 'tcp,2.159.127.100,147.32.84.118,6881', 'tcp,31.64.164.71,147.32.84.229,443', 'tcp,147.32.84.59,147.32.80.13,80', 'tcp,66.29.191.18,147.32.84.118,6881', 'tcp,188.121.222.1,147.32.84.229,13363', 'tcp,188.121.222.1,147.32.84.229,443', 'tcp,188.121.222.1,147.32.84.229,80', 'tcp,188.121.222.1,147.32.84.229,13363', 'tcp,188.121.222.1,147.32.84.229,443', 'tcp,188.121.222.1,147.32.84.229,80', 'tcp,147.32.3.51,147.32.87.22,10010', 'tcp,99.141.169.24,147.32.84.118,4793', 'tcp,147.32.3.51,147.32.87.22,10010', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,188.121.222.1,147.32.84.229,13363', 'tcp,147.32.84.59,77.78.99.22,80', 'tcp,188.121.222.1,147.32.84.229,443', 'tcp,188.121.222.1,147.32.84.229,80', 'tcp,188.121.222.1,147.32.84.229,13363', 'tcp,188.121.222.1,147.32.84.229,443', 'tcp,188.121.222.1,147.32.84.229,80', 'tcp,147.32.3.51,147.32.84.46,10010', 'tcp,147.32.3.51,147.32.87.22,10010', 'tcp,147.32.84.59,77.78.99.22,80', 'tcp,196.201.19.50,147.32.84.111,443', 'tcp,147.32.3.51,147.32.87.22,10010', 'tcp,147.32.84.59,77.78.99.22,80', 'tcp,147.32.84.59,77.78.99.21,80', 'tcp,147.32.96.45,147.32.84.165,21', 'tcp,147.32.96.45,147.32.84.165,21', 'tcp,89.223.179.146,147.32.84.118,6881', 'tcp,89.223.179.146,147.32.84.118,6881', 'tcp,147.32.84.59,74.125.232.219,80', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,140.115.25.74,147.32.84.229,13363', 'tcp,140.115.25.74,147.32.84.229,443', 'tcp,140.115.25.74,147.32.84.229,80', 'tcp,147.32.3.51,147.32.87.22,10010', 'tcp,147.32.84.59,195.113.232.82,80', 'tcp,147.32.86.166,212.24.150.110,25443', 'udp,82.39.2.249,147.32.84.59,43087', 'tcp,147.32.86.166,147.32.192.34,993', 'tcp,115.184.37.24,147.32.84.2,80', 'tcp,80.78.79.156,147.32.86.24,31002', 'udp,147.32.86.24,151.41.188.39,49621', 'udp,82.73.244.56,147.32.84.118,1153', 'tcp,188.95.61.42,147.32.86.110,48190', 'tcp,192.221.106.126,147.32.84.59,2774', 'tcp,212.111.2.151,147.32.86.135,3978', 'tcp,147.32.84.59,95.172.94.54,80', 'udp,114.78.14.160,147.32.84.59,43087', 'tcp,147.32.80.13,147.32.85.88,56949', 'tcp,147.32.86.166,195.250.146.100,8000', 'udp,115.108.130.214,147.32.84.229,13363', 'tcp,147.32.84.229,122.176.204.167,16041', 'tcp,82.209.194.12,147.32.86.165,12114', 'tcp,147.32.82.101,147.32.86.88,3389', 'tcp,194.108.204.22,147.32.84.138,8080', 'tcp,147.32.85.74,147.32.203.229,2971', 'tcp,147.32.85.56,193.87.80.3,51019', 'tcp,147.32.86.24,95.227.158.77,60330', 'tcp,147.32.84.118,84.222.204.28,6881', 'tcp,147.32.86.53,67.218.100.83,80', 'udp,24.4.101.240,147.32.84.59,43087', 'tcp,147.32.84.229,147.213.68.141,1040', 'tcp,147.32.84.229,147.32.89.184,58898', 'udp,86.161.84.198,147.32.84.229,13363', 'udp,213.155.227.215,147.32.84.229,13363', 'tcp,147.32.84.229,151.45.215.195,1059', 'tcp,147.32.84.229,213.155.227.215,59277', 'udp,147.32.84.59,192.134.164.161,443', 'udp,192.166.145.21,147.32.84.229,13363', 'tcp,74.125.232.214,147.32.86.110,48102', 'tcp,151.41.188.39,147.32.86.24,31002', 'tcp,147.32.84.229,192.166.145.6,49198', 'tcp,85.237.224.48,147.32.85.56,44076', 'tcp,89.135.152.106,147.32.87.220,1126', 'tcp,211.101.37.103,147.32.84.2,80', 'tcp,147.32.84.59,195.72.134.115,80', 'udp,81.81.67.46,147.32.84.229,13363', 'tcp,147.32.86.223,195.130.82.45,443', 'tcp,147.32.84.59,62.44.1.24,80', 'udp,116.50.166.74,147.32.84.229,13363', 'udp,147.32.84.229,46.5.184.57,36165', 'tcp,217.150.190.17,147.32.86.24,443', 'tcp,74.125.108.208,147.32.84.59,2768', 'tcp,147.32.84.59,74.125.232.215,443', 'tcp,41.130.235.95,147.32.84.229,13363', 'tcp,147.32.84.229,212.239.26.199,51572', 'udp,58.182.2.6,147.32.84.59,43087', 'udp,147.32.87.30,147.32.80.9,53', 'tcp,46.158.48.2,147.32.84.118,6881', 'udp,147.32.84.94,178.200.203.145,7300', 'udp,147.32.84.94,81.57.190.106,6911', 'tcp,77.127.196.107,147.32.84.229,443', 'tcp,147.32.84.73,113.161.71.62,38217', 'udp,115.173.243.205,147.32.84.229,13363', 'tcp,147.32.86.24,194.161.219.176,51003', 'tcp,147.32.84.118,31.162.200.244,6881', 'udp,174.98.117.98,147.32.84.229,13363', 'udp,147.32.84.229,77.126.195.83,23065', 'tcp,85.207.55.78,147.32.84.229,13363', 'tcp,130.192.181.149,147.32.84.229,443', 'udp,147.32.84.229,68.51.197.191,21348', 'udp,147.32.84.229,114.26.174.109,31056', 'udp,77.85.143.253,147.32.84.229,13363', 'tcp,81.81.67.46,147.32.84.229,13363', 'udp,95.149.168.251,147.32.84.229,13363', 'tcp,81.20.48.51,147.32.84.59,39836', 'udp,94.179.103.184,147.32.84.229,13363', 'tcp,84.12.54.36,147.32.84.118,6881', 'udp,203.125.50.50,147.32.84.229,13363', 'udp,2.32.222.83,147.32.84.229,13363', 'tcp,195.24.232.164,147.32.84.164,34588', 'udp,196.44.240.61,147.32.84.229,13363', 'udp,49.240.140.102,147.32.84.229,443', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,147.32.84.59,80.239.149.26,80', 'udp,201.209.15.135,147.32.84.59,43087', 'tcp,94.126.186.67,147.32.84.229,80', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,147.32.84.59,62.44.1.24,80', 'tcp,147.32.86.223,89.221.217.12,1935', 'udp,86.100.133.199,147.32.84.229,13363', 'udp,58.8.226.198,147.32.84.229,13363', 'tcp,194.108.204.22,147.32.84.138,8080', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,223.205.214.227,147.32.84.59,43087', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.86.223,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,98.244.73.136,147.32.84.229,13363', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,147.32.97.253,147.32.84.8,22', 'udp,113.65.40.102,147.32.84.229,13363', 'tcp,195.250.146.6,147.32.84.59,49340', 'tcp,74.125.232.215,147.32.86.110,53538', 'tcp,78.128.194.184,147.32.84.68,52948', 'tcp,147.32.84.59,74.125.232.215,443', 'tcp,77.246.52.166,147.32.84.229,443', 'tcp,77.246.52.166,147.32.84.229,13363', 'tcp,78.80.14.227,147.32.84.3,41343', 'udp,109.164.3.183,147.32.84.229,13363', 'tcp,147.32.84.229,85.70.149.37,3360', 'udp,141.156.150.237,147.32.84.229,13363', 'tcp,82.199.111.22,147.32.84.229,443', 'udp,46.191.167.153,147.32.84.229,13363', 'tcp,147.32.84.229,195.239.66.250,50973', 'tcp,147.32.85.34,194.108.204.19,35149', 'udp,67.160.121.194,147.32.84.59,43087', 'udp,126.170.234.66,147.32.84.229,13363', 'udp,147.32.84.229,95.52.90.246,53185', 'udp,147.32.84.229,78.84.137.106,30657', 'udp,147.32.84.229,116.255.12.184,55584', 'udp,147.32.84.229,24.247.253.8,34092', 'udp,83.11.238.15,147.32.86.239,161', 'tcp,62.24.66.210,147.32.84.229,443', 'udp,178.90.23.47,147.32.84.229,13363', 'tcp,147.32.86.165,94.100.187.194,80', 'tcp,147.32.86.165,94.100.187.194,80', 'udp,147.32.85.89,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'tcp,147.32.85.26,209.85.148.147,80', 'udp,147.32.84.59,109.175.50.70,1194', 'tcp,147.32.84.59,117.194.42.208,33482', 'udp,147.32.84.59,114.138.217.214,9146', 'udp,178.253.242.3,147.32.84.229,13363', 'udp,147.32.84.118,178.2.216.156,6881', 'tcp,74.125.232.216,147.32.84.21,44146', 'udp,78.90.84.134,147.32.84.229,13363', 'udp,147.230.32.193,147.32.84.229,13363', 'tcp,147.32.84.229,194.228.143.168,16516', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,147.32.86.165,90.183.39.86,80', 'udp,85.13.72.246,147.32.87.2,123', 'tcp,147.32.84.59,76.13.114.90,80', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,81.90.173.232,147.32.84.229,13363', 'udp,147.32.84.229,88.177.153.150,23739', 'udp,147.32.84.229,114.45.250.190,1942', 'udp,147.32.87.48,147.32.86.252,161', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,82.177.229.240,147.32.84.229,13363', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,41.241.93.111,147.32.84.229,13363', 'tcp,147.32.86.165,77.78.99.21,80', 'tcp,76.164.192.82,147.32.86.117,16476', 'tcp,147.32.86.166,74.125.232.213,443', 'udp,130.236.37.3,147.32.85.8,57989', 'tcp,90.183.38.8,147.32.84.59,49463', 'udp,218.209.43.8,147.32.86.165,12114', 'udp,147.32.84.229,87.244.151.27,31518', 'tcp,147.32.84.229,89.178.50.15,1273', 'udp,147.32.84.229,94.179.93.205,3605', 'tcp,147.32.85.124,74.125.232.202,80', 'udp,94.74.233.93,147.32.84.229,13363', 'tcp,113.105.171.56,147.32.86.66,40565', 'tcp,192.100.130.7,147.32.84.229,443', 'udp,212.235.185.142,147.32.84.229,13363', 'udp,147.32.84.229,109.149.84.86,20992', 'udp,147.32.84.229,109.149.84.86,21835', 'tcp,147.32.84.184,199.59.149.200,443', 'tcp,147.32.86.53,188.175.127.220,22', 'udp,203.99.179.112,147.32.84.59,43087', 'udp,74.215.40.251,147.32.84.229,13363', 'tcp,147.32.84.229,159.148.227.125,49230', 'tcp,194.108.204.19,147.32.84.138,8080', 'udp,60.250.102.130,147.32.84.229,13363', 'udp,94.198.111.82,147.32.84.229,13363', 'tcp,147.32.84.59,74.125.232.216,80', 'udp,193.142.0.1,147.32.84.229,13363', 'tcp,193.165.4.137,147.32.84.229,13363', 'tcp,147.32.84.118,183.83.130.244,6881', 'udp,85.117.224.50,147.32.84.229,13363', 'tcp,67.195.115.177,147.32.87.27,80', 'tcp,74.125.232.213,147.32.85.5,52316', 'udp,83.228.35.75,147.32.84.229,13363', 'udp,78.141.177.63,147.32.84.229,13363', 'tcp,194.129.65.79,147.32.84.229,13363', 'udp,109.153.100.95,147.32.84.229,13363', 'udp,147.32.84.229,84.217.37.3,55840', 'tcp,147.32.84.59,205.188.10.189,443', 'udp,95.32.5.235,147.32.84.229,13363', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,147.32.84.118,109.11.239.168,6881', 'udp,147.32.84.229,201.79.47.179,54239', 'udp,147.32.84.229,182.170.250.154,55316', 'udp,147.32.84.229,79.50.93.42,45974', 'udp,222.145.103.227,147.32.84.229,13363', 'udp,69.238.171.67,147.32.84.229,13363', 'udp,147.32.84.229,77.120.178.242,15451', 'udp,124.102.16.132,147.32.84.229,13363', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,195.18.192.176,147.32.84.229,13363', 'udp,147.32.84.229,118.165.82.114,42796', 'udp,147.32.84.229,85.14.18.164,32410', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,147.32.86.147,74.125.232.213,443', 'tcp,147.32.86.147,74.125.232.213,443', 'udp,147.32.86.111,192.168.1.99,161', 'udp,110.1.150.128,147.32.84.229,13363', 'udp,147.32.86.20,147.32.80.9,53', 'tcp,147.32.86.20,188.138.84.239,80', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'tcp,147.32.84.118,178.126.213.97,6881', 'tcp,147.32.84.59,88.86.102.50,5222', 'udp,62.118.200.4,147.32.84.229,13363', 'udp,147.32.84.229,76.91.139.18,5318', 'udp,91.148.14.80,147.32.84.229,13363', 'udp,147.32.85.25,147.32.80.9,53', 'udp,147.32.85.25,147.32.80.9,53', 'udp,88.1.124.189,147.32.84.229,13363', 'udp,188.244.37.212,147.32.84.229,13363', 'tcp,151.50.42.148,147.32.84.229,13363', 'udp,90.178.130.71,147.32.84.229,13363', 'udp,147.32.87.254,147.32.80.9,53', 'udp,219.95.99.182,147.32.84.229,13363', 'udp,81.145.244.43,147.32.84.229,13363', 'tcp,147.32.84.59,86.63.194.225,80', 'udp,147.32.87.254,129.6.15.28,123', 'tcp,147.32.84.229,119.82.68.244,3689', 'udp,147.32.84.229,64.228.86.17,59156', 'udp,147.32.84.229,68.227.9.121,38769', 'udp,147.32.84.229,94.155.203.122,41688', 'udp,147.32.84.229,77.37.194.251,10733', 'udp,147.32.84.229,118.233.160.13,29930', 'udp,147.32.84.229,98.166.254.26,16775', 'udp,147.32.84.229,78.141.181.221,34049', 'udp,147.32.84.229,61.219.106.199,22015', 'udp,147.32.84.229,79.180.232.121,33791', 'tcp,147.32.84.59,121.218.171.254,59229', 'udp,119.194.132.184,147.32.84.229,13363', 'udp,147.32.84.111,94.45.56.221,14711', 'udp,147.32.84.111,88.160.241.60,13631', 'udp,147.32.84.111,85.122.145.220,63231', 'udp,147.32.84.111,24.218.41.238,42643', 'udp,147.32.84.111,82.243.178.156,24211', 'udp,147.32.84.111,96.20.140.58,55397', 'udp,147.32.84.111,60.250.85.109,37514', 'udp,147.32.84.111,114.40.141.216,18082', 'udp,147.32.84.111,60.248.145.115,8206', 'udp,147.32.84.111,68.144.201.22,58975', 'udp,147.32.84.111,70.64.246.26,16832', 'udp,147.32.84.111,84.229.5.224,8824', 'udp,147.32.84.59,46.127.53.27,44593', 'udp,147.32.84.59,92.247.216.178,52613', 'udp,147.32.84.59,88.193.88.76,58676', 'udp,147.32.86.165,84.38.184.4,49341', 'tcp,82.209.194.12,147.32.86.165,443', 'tcp,147.32.86.181,147.32.3.12,4628', 'udp,78.231.189.116,147.32.84.59,63550', 'tcp,91.207.59.161,147.32.84.59,2641', 'udp,147.32.84.59,62.245.98.34,14065', 'udp,82.135.148.158,147.32.84.229,13363', 'udp,147.32.86.6,208.46.117.171,3478', 'udp,147.32.84.111,149.5.45.8,43017', 'udp,147.32.84.111,84.42.148.179,49653', 'tcp,85.193.5.150,147.32.84.229,13363', 'udp,195.110.40.7,147.32.84.229,13363', 'udp,147.32.84.118,174.48.220.201,6881', 'udp,147.32.84.118,178.4.36.49,6881', 'udp,201.231.168.71,147.32.84.229,13363', 'udp,147.32.84.111,147.229.74.152,43117', 'tcp,194.242.41.77,147.32.84.229,443', 'udp,147.32.84.229,84.112.212.191,13723', 'udp,147.32.84.229,77.72.244.45,26388', 'tcp,147.32.84.59,74.125.232.220,80', 'tcp,147.32.84.59,74.125.232.220,80', 'tcp,147.32.84.59,74.125.232.220,80', 'tcp,147.32.84.59,74.125.232.220,80', 'tcp,147.32.87.220,213.226.244.55,80', 'tcp,91.207.59.162,147.32.84.59,2739', 'udp,147.32.84.229,220.130.40.204,12748', 'udp,147.32.84.229,122.116.188.88,18510', 'udp,147.32.84.229,128.32.224.18,37200', 'udp,147.32.84.229,76.27.46.107,55557', 'udp,147.32.84.229,69.204.160.28,23055', 'udp,91.123.225.57,147.32.84.229,13363', 'udp,87.0.21.115,147.32.84.229,13363', 'tcp,147.32.84.229,130.75.243.145,3312', 'tcp,205.188.8.254,147.32.86.111,1071', 'tcp,147.32.84.2,125.66.203.116,4669', 'tcp,91.123.225.57,147.32.84.229,13363', 'tcp,91.207.59.162,147.32.84.59,2755', 'tcp,91.207.59.162,147.32.84.59,2756', 'tcp,147.32.84.229,122.174.115.150,2164', 'tcp,147.32.86.77,88.86.102.50,5222', 'tcp,147.32.86.223,89.221.217.12,1935', 'udp,147.32.84.229,68.37.66.192,13873', 'tcp,147.32.84.229,41.132.73.182,23018', 'tcp,115.184.37.24,147.32.84.2,80', 'udp,213.155.227.215,147.32.84.229,13363', 'tcp,94.127.76.194,147.32.84.164,50188', 'tcp,91.207.59.162,147.32.84.59,2762', 'tcp,91.207.59.162,147.32.84.59,2760', 'tcp,91.207.59.162,147.32.84.59,2759', 'tcp,147.32.84.59,63.135.80.58,80', 'tcp,147.32.84.59,66.150.244.242,80', 'tcp,137.254.16.69,147.32.85.103,49311', 'tcp,213.226.63.145,147.32.85.56,44076', 'tcp,147.32.85.56,46.10.96.224,3412', 'udp,218.43.165.32,147.32.84.229,13363', 'tcp,147.32.84.229,192.84.221.33,55000', 'udp,147.32.84.111,110.134.149.49,40261', 'tcp,147.32.85.60,147.32.80.13,80', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'tcp,147.32.85.8,147.32.192.34,993', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.59,77.78.110.71,123', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.85.18,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.85.18,147.32.80.9,53', 'udp,147.32.85.18,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,147.32.84.138,147.32.80.9,53', 'udp,113.234.168.192,147.32.84.229,13363', 'tcp,195.200.251.89,147.32.84.229,443']\n",
      "Step 2: Build the data set\n",
      "Voc: ---  32\n",
      "VOC:  32\n",
      "Step 3: Build the model\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step 4: Train the model\n",
      "Step 4.1: Initialized\n",
      "Average loss at step 0 :  24.55733871459961  from  1917  steps.\n",
      "Percentage:  0.0  %\n",
      "Percentage:  0.05216484089723526  %\n",
      "Percentage:  0.10432968179447052  %\n",
      "Percentage:  0.1564945226917058  %\n",
      "Percentage:  0.20865936358894105  %\n",
      "Percentage:  0.2608242044861763  %\n",
      "Percentage:  0.3129890453834116  %\n",
      "Percentage:  0.3651538862806468  %\n",
      "Percentage:  0.4173187271778821  %\n",
      "Percentage:  0.4694835680751174  %\n",
      "Percentage:  0.5216484089723527  %\n",
      "Percentage:  0.5738132498695879  %\n",
      "Percentage:  0.6259780907668232  %\n",
      "Percentage:  0.6781429316640585  %\n",
      "Percentage:  0.7303077725612936  %\n",
      "Percentage:  0.7824726134585289  %\n",
      "Percentage:  0.8346374543557642  %\n",
      "Percentage:  0.8868022952529995  %\n",
      "Percentage:  0.9389671361502347  %\n",
      "Percentage:  0.99113197704747  %\n",
      "Percentage:  1.0432968179447053  %\n",
      "Percentage:  1.0954616588419406  %\n",
      "Percentage:  1.1476264997391759  %\n",
      "Percentage:  1.1997913406364111  %\n",
      "Percentage:  1.2519561815336464  %\n",
      "Percentage:  1.3041210224308817  %\n",
      "Percentage:  1.356285863328117  %\n",
      "Percentage:  1.408450704225352  %\n",
      "Percentage:  1.4606155451225873  %\n",
      "Percentage:  1.5127803860198226  %\n",
      "Percentage:  1.5649452269170578  %\n",
      "Percentage:  1.6171100678142931  %\n",
      "Percentage:  1.6692749087115284  %\n",
      "Percentage:  1.7214397496087637  %\n",
      "Percentage:  1.773604590505999  %\n",
      "Percentage:  1.8257694314032342  %\n",
      "Percentage:  1.8779342723004695  %\n",
      "Percentage:  1.9300991131977048  %\n",
      "Percentage:  1.98226395409494  %\n",
      "Percentage:  2.0344287949921753  %\n",
      "Percentage:  2.0865936358894106  %\n",
      "Percentage:  2.138758476786646  %\n",
      "Percentage:  2.190923317683881  %\n",
      "Percentage:  2.2430881585811164  %\n",
      "Percentage:  2.2952529994783517  %\n",
      "Percentage:  2.347417840375587  %\n",
      "Percentage:  2.3995826812728223  %\n",
      "Percentage:  2.4517475221700575  %\n",
      "Percentage:  2.503912363067293  %\n",
      "Percentage:  2.556077203964528  %\n",
      "Percentage:  2.6082420448617634  %\n",
      "Percentage:  2.6604068857589986  %\n",
      "Percentage:  2.712571726656234  %\n",
      "Percentage:  2.7647365675534687  %\n",
      "Percentage:  2.816901408450704  %\n",
      "Percentage:  2.8690662493479393  %\n",
      "Percentage:  2.9212310902451746  %\n",
      "Percentage:  2.97339593114241  %\n",
      "Percentage:  3.025560772039645  %\n",
      "Percentage:  3.0777256129368804  %\n",
      "Percentage:  3.1298904538341157  %\n",
      "Percentage:  3.182055294731351  %\n",
      "Percentage:  3.2342201356285862  %\n",
      "Percentage:  3.2863849765258215  %\n",
      "Percentage:  3.338549817423057  %\n",
      "Percentage:  3.390714658320292  %\n",
      "Percentage:  3.4428794992175273  %\n",
      "Percentage:  3.4950443401147626  %\n",
      "Percentage:  3.547209181011998  %\n",
      "Percentage:  3.599374021909233  %\n",
      "Percentage:  3.6515388628064684  %\n",
      "Percentage:  3.7037037037037037  %\n",
      "Percentage:  3.755868544600939  %\n",
      "Percentage:  3.8080333854981743  %\n",
      "Percentage:  3.8601982263954095  %\n",
      "Percentage:  3.912363067292645  %\n",
      "Percentage:  3.96452790818988  %\n",
      "Percentage:  4.016692749087115  %\n",
      "Percentage:  4.068857589984351  %\n",
      "Percentage:  4.1210224308815855  %\n",
      "Percentage:  4.173187271778821  %\n",
      "Percentage:  4.225352112676056  %\n",
      "Percentage:  4.277516953573292  %\n",
      "Percentage:  4.329681794470527  %\n",
      "Percentage:  4.381846635367762  %\n",
      "Percentage:  4.434011476264997  %\n",
      "Percentage:  4.486176317162233  %\n",
      "Percentage:  4.538341158059468  %\n",
      "Percentage:  4.590505998956703  %\n",
      "Percentage:  4.642670839853938  %\n",
      "Percentage:  4.694835680751174  %\n",
      "Percentage:  4.747000521648409  %\n",
      "Percentage:  4.7991653625456445  %\n",
      "Percentage:  4.851330203442879  %\n",
      "Percentage:  4.903495044340115  %\n",
      "Percentage:  4.95565988523735  %\n",
      "Percentage:  5.007824726134586  %\n",
      "Percentage:  5.0599895670318205  %\n",
      "Percentage:  5.112154407929056  %\n",
      "Percentage:  5.164319248826291  %\n",
      "Percentage:  5.216484089723527  %\n",
      "Percentage:  5.268648930620762  %\n",
      "Percentage:  5.320813771517997  %\n",
      "Percentage:  5.372978612415232  %\n",
      "Percentage:  5.425143453312468  %\n",
      "Percentage:  5.477308294209703  %\n",
      "Percentage:  5.5294731351069375  %\n",
      "Percentage:  5.581637976004173  %\n",
      "Percentage:  5.633802816901408  %\n",
      "Percentage:  5.685967657798644  %\n",
      "Percentage:  5.738132498695879  %\n",
      "Percentage:  5.790297339593114  %\n",
      "Percentage:  5.842462180490349  %\n",
      "Percentage:  5.894627021387585  %\n",
      "Percentage:  5.94679186228482  %\n",
      "Percentage:  5.998956703182055  %\n",
      "Percentage:  6.05112154407929  %\n",
      "Percentage:  6.103286384976526  %\n",
      "Percentage:  6.155451225873761  %\n",
      "Percentage:  6.2076160667709965  %\n",
      "Percentage:  6.259780907668231  %\n",
      "Percentage:  6.311945748565467  %\n",
      "Percentage:  6.364110589462702  %\n",
      "Percentage:  6.416275430359938  %\n",
      "Percentage:  6.4684402712571725  %\n",
      "Percentage:  6.520605112154408  %\n",
      "Percentage:  6.572769953051643  %\n",
      "Percentage:  6.624934793948879  %\n",
      "Percentage:  6.677099634846114  %\n",
      "Percentage:  6.729264475743349  %\n",
      "Percentage:  6.781429316640584  %\n",
      "Percentage:  6.83359415753782  %\n",
      "Percentage:  6.885758998435055  %\n",
      "Percentage:  6.93792383933229  %\n",
      "Percentage:  6.990088680229525  %\n",
      "Percentage:  7.042253521126761  %\n",
      "Percentage:  7.094418362023996  %\n",
      "Percentage:  7.1465832029212315  %\n",
      "Percentage:  7.198748043818466  %\n",
      "Percentage:  7.250912884715702  %\n",
      "Percentage:  7.303077725612937  %\n",
      "Percentage:  7.355242566510172  %\n",
      "Percentage:  7.407407407407407  %\n",
      "Percentage:  7.459572248304642  %\n",
      "Percentage:  7.511737089201878  %\n",
      "Percentage:  7.563901930099113  %\n",
      "Percentage:  7.6160667709963485  %\n",
      "Percentage:  7.668231611893583  %\n",
      "Percentage:  7.720396452790819  %\n",
      "Percentage:  7.772561293688054  %\n",
      "Percentage:  7.82472613458529  %\n",
      "Percentage:  7.8768909754825245  %\n",
      "Percentage:  7.92905581637976  %\n",
      "Percentage:  7.981220657276995  %\n",
      "Percentage:  8.03338549817423  %\n",
      "Percentage:  8.085550339071466  %\n",
      "Percentage:  8.137715179968701  %\n",
      "Percentage:  8.189880020865937  %\n",
      "Percentage:  8.242044861763171  %\n",
      "Percentage:  8.294209702660407  %\n",
      "Percentage:  8.346374543557642  %\n",
      "Percentage:  8.398539384454878  %\n",
      "Percentage:  8.450704225352112  %\n",
      "Percentage:  8.502869066249348  %\n",
      "Percentage:  8.555033907146584  %\n",
      "Percentage:  8.60719874804382  %\n",
      "Percentage:  8.659363588941053  %\n",
      "Percentage:  8.711528429838289  %\n",
      "Percentage:  8.763693270735525  %\n",
      "Percentage:  8.81585811163276  %\n",
      "Percentage:  8.868022952529994  %\n",
      "Percentage:  8.92018779342723  %\n",
      "Percentage:  8.972352634324466  %\n",
      "Percentage:  9.024517475221701  %\n",
      "Percentage:  9.076682316118935  %\n",
      "Percentage:  9.128847157016171  %\n",
      "Percentage:  9.181011997913407  %\n",
      "Percentage:  9.23317683881064  %\n",
      "Percentage:  9.285341679707876  %\n",
      "Percentage:  9.337506520605112  %\n",
      "Percentage:  9.389671361502348  %\n",
      "Percentage:  9.441836202399582  %\n",
      "Percentage:  9.494001043296818  %\n",
      "Percentage:  9.546165884194053  %\n",
      "Percentage:  9.598330725091289  %\n",
      "Percentage:  9.650495565988523  %\n",
      "Percentage:  9.702660406885759  %\n",
      "Percentage:  9.754825247782994  %\n",
      "Percentage:  9.80699008868023  %\n",
      "Percentage:  9.859154929577464  %\n",
      "Percentage:  9.9113197704747  %\n",
      "Percentage:  9.963484611371936  %\n",
      "Percentage:  10.015649452269171  %\n",
      "Percentage:  10.067814293166405  %\n",
      "Percentage:  10.119979134063641  %\n",
      "Percentage:  10.172143974960877  %\n",
      "Percentage:  10.224308815858112  %\n",
      "Percentage:  10.276473656755346  %\n",
      "Percentage:  10.328638497652582  %\n",
      "Percentage:  10.380803338549818  %\n",
      "Percentage:  10.432968179447053  %\n",
      "Percentage:  10.485133020344287  %\n",
      "Percentage:  10.537297861241523  %\n",
      "Percentage:  10.589462702138759  %\n",
      "Percentage:  10.641627543035995  %\n",
      "Percentage:  10.693792383933229  %\n",
      "Percentage:  10.745957224830464  %\n",
      "Percentage:  10.7981220657277  %\n",
      "Percentage:  10.850286906624936  %\n",
      "Percentage:  10.90245174752217  %\n",
      "Percentage:  10.954616588419405  %\n",
      "Percentage:  11.006781429316641  %\n",
      "Percentage:  11.058946270213875  %\n",
      "Percentage:  11.11111111111111  %\n",
      "Percentage:  11.163275952008346  %\n",
      "Percentage:  11.215440792905582  %\n",
      "Percentage:  11.267605633802816  %\n",
      "Percentage:  11.319770474700052  %\n",
      "Percentage:  11.371935315597288  %\n",
      "Percentage:  11.424100156494523  %\n",
      "Percentage:  11.476264997391757  %\n",
      "Percentage:  11.528429838288993  %\n",
      "Percentage:  11.580594679186229  %\n",
      "Percentage:  11.632759520083464  %\n",
      "Percentage:  11.684924360980698  %\n",
      "Percentage:  11.737089201877934  %\n",
      "Percentage:  11.78925404277517  %\n",
      "Percentage:  11.841418883672405  %\n",
      "Percentage:  11.89358372456964  %\n",
      "Percentage:  11.945748565466875  %\n",
      "Percentage:  11.99791340636411  %\n",
      "Percentage:  12.050078247261347  %\n",
      "Percentage:  12.10224308815858  %\n",
      "Percentage:  12.154407929055816  %\n",
      "Percentage:  12.206572769953052  %\n",
      "Percentage:  12.258737610850288  %\n",
      "Percentage:  12.310902451747522  %\n",
      "Percentage:  12.363067292644757  %\n",
      "Percentage:  12.415232133541993  %\n",
      "Percentage:  12.467396974439229  %\n",
      "Percentage:  12.519561815336463  %\n",
      "Percentage:  12.571726656233698  %\n",
      "Percentage:  12.623891497130934  %\n",
      "Percentage:  12.67605633802817  %\n",
      "Percentage:  12.728221178925404  %\n",
      "Percentage:  12.78038601982264  %\n",
      "Percentage:  12.832550860719875  %\n",
      "Percentage:  12.88471570161711  %\n",
      "Percentage:  12.936880542514345  %\n",
      "Percentage:  12.98904538341158  %\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Percentage:  13.041210224308816  %\n",
      "Percentage:  13.09337506520605  %\n",
      "Percentage:  13.145539906103286  %\n",
      "Percentage:  13.197704747000522  %\n",
      "Percentage:  13.249869587897757  %\n",
      "Percentage:  13.302034428794991  %\n",
      "Percentage:  13.354199269692227  %\n",
      "Percentage:  13.406364110589463  %\n",
      "Percentage:  13.458528951486699  %\n",
      "Percentage:  13.510693792383933  %\n",
      "Percentage:  13.562858633281168  %\n",
      "Percentage:  13.615023474178404  %\n",
      "Percentage:  13.66718831507564  %\n",
      "Percentage:  13.719353155972874  %\n",
      "Percentage:  13.77151799687011  %\n",
      "Percentage:  13.823682837767345  %\n",
      "Percentage:  13.87584767866458  %\n",
      "Percentage:  13.928012519561815  %\n",
      "Percentage:  13.98017736045905  %\n",
      "Percentage:  14.032342201356286  %\n",
      "Percentage:  14.084507042253522  %\n",
      "Percentage:  14.136671883150756  %\n",
      "Percentage:  14.188836724047992  %\n",
      "Percentage:  14.241001564945227  %\n",
      "Percentage:  14.293166405842463  %\n",
      "Percentage:  14.345331246739697  %\n",
      "Percentage:  14.397496087636933  %\n",
      "Percentage:  14.449660928534168  %\n",
      "Percentage:  14.501825769431404  %\n",
      "Percentage:  14.553990610328638  %\n",
      "Percentage:  14.606155451225874  %\n",
      "Percentage:  14.65832029212311  %\n",
      "Percentage:  14.710485133020343  %\n",
      "Percentage:  14.76264997391758  %\n",
      "Percentage:  14.814814814814815  %\n",
      "Percentage:  14.86697965571205  %\n",
      "Percentage:  14.919144496609285  %\n",
      "Percentage:  14.97130933750652  %\n",
      "Percentage:  15.023474178403756  %\n",
      "Percentage:  15.075639019300992  %\n",
      "Percentage:  15.127803860198226  %\n",
      "Percentage:  15.179968701095461  %\n",
      "Percentage:  15.232133541992697  %\n",
      "Percentage:  15.284298382889933  %\n",
      "Percentage:  15.336463223787167  %\n",
      "Percentage:  15.388628064684402  %\n",
      "Percentage:  15.440792905581638  %\n",
      "Percentage:  15.492957746478874  %\n",
      "Percentage:  15.545122587376108  %\n",
      "Percentage:  15.597287428273344  %\n",
      "Percentage:  15.64945226917058  %\n",
      "Percentage:  15.701617110067815  %\n",
      "Percentage:  15.753781950965049  %\n",
      "Percentage:  15.805946791862285  %\n",
      "Percentage:  15.85811163275952  %\n",
      "Percentage:  15.910276473656756  %\n",
      "Percentage:  15.96244131455399  %\n",
      "Percentage:  16.014606155451226  %\n",
      "Percentage:  16.06677099634846  %\n",
      "Percentage:  16.118935837245697  %\n",
      "Percentage:  16.17110067814293  %\n",
      "Percentage:  16.22326551904017  %\n",
      "Percentage:  16.275430359937403  %\n",
      "Percentage:  16.327595200834637  %\n",
      "Percentage:  16.379760041731874  %\n",
      "Percentage:  16.431924882629108  %\n",
      "Percentage:  16.484089723526342  %\n",
      "Percentage:  16.53625456442358  %\n",
      "Percentage:  16.588419405320813  %\n",
      "Percentage:  16.640584246218047  %\n",
      "Percentage:  16.692749087115285  %\n",
      "Percentage:  16.74491392801252  %\n",
      "Percentage:  16.797078768909756  %\n",
      "Percentage:  16.84924360980699  %\n",
      "Percentage:  16.901408450704224  %\n",
      "Percentage:  16.95357329160146  %\n",
      "Percentage:  17.005738132498696  %\n",
      "Percentage:  17.05790297339593  %\n",
      "Percentage:  17.110067814293167  %\n",
      "Percentage:  17.1622326551904  %\n",
      "Percentage:  17.21439749608764  %\n",
      "Percentage:  17.266562336984872  %\n",
      "Percentage:  17.318727177882106  %\n",
      "Percentage:  17.370892018779344  %\n",
      "Percentage:  17.423056859676578  %\n",
      "Percentage:  17.47522170057381  %\n",
      "Percentage:  17.52738654147105  %\n",
      "Percentage:  17.579551382368283  %\n",
      "Percentage:  17.63171622326552  %\n",
      "Percentage:  17.683881064162755  %\n",
      "Percentage:  17.73604590505999  %\n",
      "Percentage:  17.788210745957226  %\n",
      "Percentage:  17.84037558685446  %\n",
      "Percentage:  17.892540427751694  %\n",
      "Percentage:  17.94470526864893  %\n",
      "Percentage:  17.996870109546165  %\n",
      "Percentage:  18.049034950443403  %\n",
      "Percentage:  18.101199791340637  %\n",
      "Percentage:  18.15336463223787  %\n",
      "Percentage:  18.20552947313511  %\n",
      "Percentage:  18.257694314032342  %\n",
      "Percentage:  18.309859154929576  %\n",
      "Percentage:  18.362023995826814  %\n",
      "Percentage:  18.414188836724048  %\n",
      "Percentage:  18.46635367762128  %\n",
      "Percentage:  18.51851851851852  %\n",
      "Percentage:  18.570683359415753  %\n",
      "Percentage:  18.62284820031299  %\n",
      "Percentage:  18.675013041210224  %\n",
      "Percentage:  18.72717788210746  %\n",
      "Percentage:  18.779342723004696  %\n",
      "Percentage:  18.83150756390193  %\n",
      "Percentage:  18.883672404799164  %\n",
      "Percentage:  18.9358372456964  %\n",
      "Percentage:  18.988002086593635  %\n",
      "Percentage:  19.040166927490873  %\n",
      "Percentage:  19.092331768388107  %\n",
      "Percentage:  19.14449660928534  %\n",
      "Percentage:  19.196661450182578  %\n",
      "Percentage:  19.248826291079812  %\n",
      "Percentage:  19.300991131977046  %\n",
      "Percentage:  19.353155972874283  %\n",
      "Percentage:  19.405320813771517  %\n",
      "Percentage:  19.457485654668755  %\n",
      "Percentage:  19.50965049556599  %\n",
      "Percentage:  19.561815336463223  %\n",
      "Percentage:  19.61398017736046  %\n",
      "Percentage:  19.666145018257694  %\n",
      "Percentage:  19.718309859154928  %\n",
      "Percentage:  19.770474700052166  %\n",
      "Percentage:  19.8226395409494  %\n",
      "Percentage:  19.874804381846637  %\n",
      "Percentage:  19.92696922274387  %\n",
      "Percentage:  19.979134063641105  %\n",
      "Percentage:  20.031298904538342  %\n",
      "Percentage:  20.083463745435576  %\n",
      "Percentage:  20.13562858633281  %\n",
      "Percentage:  20.187793427230048  %\n",
      "Percentage:  20.239958268127282  %\n",
      "Percentage:  20.292123109024516  %\n",
      "Percentage:  20.344287949921753  %\n",
      "Percentage:  20.396452790818987  %\n",
      "Percentage:  20.448617631716225  %\n",
      "Percentage:  20.50078247261346  %\n",
      "Percentage:  20.552947313510693  %\n",
      "Percentage:  20.60511215440793  %\n",
      "Percentage:  20.657276995305164  %\n",
      "Percentage:  20.709441836202398  %\n",
      "Percentage:  20.761606677099635  %\n",
      "Percentage:  20.81377151799687  %\n",
      "Percentage:  20.865936358894107  %\n",
      "Percentage:  20.91810119979134  %\n",
      "Percentage:  20.970266040688575  %\n",
      "Percentage:  21.022430881585812  %\n",
      "Percentage:  21.074595722483046  %\n",
      "Percentage:  21.12676056338028  %\n",
      "Percentage:  21.178925404277518  %\n",
      "Percentage:  21.23109024517475  %\n",
      "Percentage:  21.28325508607199  %\n",
      "Percentage:  21.335419926969223  %\n",
      "Percentage:  21.387584767866457  %\n",
      "Percentage:  21.439749608763695  %\n",
      "Percentage:  21.49191444966093  %\n",
      "Percentage:  21.544079290558162  %\n",
      "Percentage:  21.5962441314554  %\n",
      "Percentage:  21.648408972352634  %\n",
      "Percentage:  21.70057381324987  %\n",
      "Percentage:  21.752738654147105  %\n",
      "Percentage:  21.80490349504434  %\n",
      "Percentage:  21.857068335941577  %\n",
      "Percentage:  21.90923317683881  %\n",
      "Percentage:  21.961398017736045  %\n",
      "Percentage:  22.013562858633282  %\n",
      "Percentage:  22.065727699530516  %\n",
      "Percentage:  22.11789254042775  %\n",
      "Percentage:  22.170057381324987  %\n",
      "Percentage:  22.22222222222222  %\n",
      "Percentage:  22.27438706311946  %\n",
      "Percentage:  22.326551904016693  %\n",
      "Percentage:  22.378716744913927  %\n",
      "Percentage:  22.430881585811164  %\n",
      "Percentage:  22.4830464267084  %\n",
      "Percentage:  22.535211267605632  %\n",
      "Percentage:  22.58737610850287  %\n",
      "Percentage:  22.639540949400104  %\n",
      "Percentage:  22.69170579029734  %\n",
      "Percentage:  22.743870631194575  %\n",
      "Percentage:  22.79603547209181  %\n",
      "Percentage:  22.848200312989047  %\n",
      "Percentage:  22.90036515388628  %\n",
      "Percentage:  22.952529994783514  %\n",
      "Percentage:  23.004694835680752  %\n",
      "Percentage:  23.056859676577986  %\n",
      "Percentage:  23.109024517475223  %\n",
      "Percentage:  23.161189358372457  %\n",
      "Percentage:  23.21335419926969  %\n",
      "Percentage:  23.26551904016693  %\n",
      "Percentage:  23.317683881064163  %\n",
      "Percentage:  23.369848721961397  %\n",
      "Percentage:  23.422013562858634  %\n",
      "Percentage:  23.474178403755868  %\n",
      "Percentage:  23.526343244653106  %\n",
      "Percentage:  23.57850808555034  %\n",
      "Percentage:  23.630672926447573  %\n",
      "Percentage:  23.68283776734481  %\n",
      "Percentage:  23.735002608242045  %\n",
      "Percentage:  23.78716744913928  %\n",
      "Percentage:  23.839332290036516  %\n",
      "Percentage:  23.89149713093375  %\n",
      "Percentage:  23.943661971830984  %\n",
      "Percentage:  23.99582681272822  %\n",
      "Percentage:  24.047991653625456  %\n",
      "Percentage:  24.100156494522693  %\n",
      "Percentage:  24.152321335419927  %\n",
      "Percentage:  24.20448617631716  %\n",
      "Percentage:  24.2566510172144  %\n",
      "Percentage:  24.308815858111632  %\n",
      "Percentage:  24.360980699008866  %\n",
      "Percentage:  24.413145539906104  %\n",
      "Percentage:  24.465310380803338  %\n",
      "Percentage:  24.517475221700575  %\n",
      "Percentage:  24.56964006259781  %\n",
      "Percentage:  24.621804903495043  %\n",
      "Percentage:  24.67396974439228  %\n",
      "Percentage:  24.726134585289515  %\n",
      "Percentage:  24.77829942618675  %\n",
      "Percentage:  24.830464267083986  %\n",
      "Percentage:  24.88262910798122  %\n",
      "Percentage:  24.934793948878458  %\n",
      "Percentage:  24.98695878977569  %\n",
      "Percentage:  25.039123630672925  %\n",
      "Percentage:  25.091288471570163  %\n",
      "Percentage:  25.143453312467397  %\n",
      "Percentage:  25.19561815336463  %\n",
      "Percentage:  25.24778299426187  %\n",
      "Percentage:  25.299947835159102  %\n",
      "Percentage:  25.35211267605634  %\n",
      "Percentage:  25.404277516953574  %\n",
      "Percentage:  25.456442357850808  %\n",
      "Percentage:  25.508607198748045  %\n",
      "Percentage:  25.56077203964528  %\n",
      "Percentage:  25.612936880542513  %\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Percentage:  25.66510172143975  %\n",
      "Percentage:  25.717266562336984  %\n",
      "Percentage:  25.76943140323422  %\n",
      "Percentage:  25.821596244131456  %\n",
      "Percentage:  25.87376108502869  %\n",
      "Percentage:  25.925925925925927  %\n",
      "Percentage:  25.97809076682316  %\n",
      "Percentage:  26.030255607720395  %\n",
      "Percentage:  26.082420448617633  %\n",
      "Percentage:  26.134585289514867  %\n",
      "Percentage:  26.1867501304121  %\n",
      "Percentage:  26.238914971309338  %\n",
      "Percentage:  26.291079812206572  %\n",
      "Percentage:  26.34324465310381  %\n",
      "Percentage:  26.395409494001044  %\n",
      "Percentage:  26.447574334898277  %\n",
      "Percentage:  26.499739175795515  %\n",
      "Percentage:  26.55190401669275  %\n",
      "Percentage:  26.604068857589983  %\n",
      "Percentage:  26.65623369848722  %\n",
      "Percentage:  26.708398539384454  %\n",
      "Percentage:  26.760563380281692  %\n",
      "Percentage:  26.812728221178926  %\n",
      "Percentage:  26.86489306207616  %\n",
      "Percentage:  26.917057902973397  %\n",
      "Percentage:  26.96922274387063  %\n",
      "Percentage:  27.021387584767865  %\n",
      "Percentage:  27.073552425665103  %\n",
      "Percentage:  27.125717266562337  %\n",
      "Percentage:  27.177882107459574  %\n",
      "Percentage:  27.230046948356808  %\n",
      "Percentage:  27.282211789254042  %\n",
      "Percentage:  27.33437663015128  %\n",
      "Percentage:  27.386541471048513  %\n",
      "Percentage:  27.438706311945747  %\n",
      "Percentage:  27.490871152842985  %\n",
      "Percentage:  27.54303599374022  %\n",
      "Percentage:  27.595200834637453  %\n",
      "Percentage:  27.64736567553469  %\n",
      "Percentage:  27.699530516431924  %\n",
      "Percentage:  27.75169535732916  %\n",
      "Percentage:  27.803860198226396  %\n",
      "Percentage:  27.85602503912363  %\n",
      "Percentage:  27.908189880020867  %\n",
      "Percentage:  27.9603547209181  %\n",
      "Percentage:  28.012519561815335  %\n",
      "Percentage:  28.064684402712572  %\n",
      "Percentage:  28.116849243609806  %\n",
      "Percentage:  28.169014084507044  %\n",
      "Percentage:  28.221178925404278  %\n",
      "Percentage:  28.27334376630151  %\n",
      "Percentage:  28.32550860719875  %\n",
      "Percentage:  28.377673448095983  %\n",
      "Percentage:  28.429838288993217  %\n",
      "Percentage:  28.482003129890455  %\n",
      "Percentage:  28.53416797078769  %\n",
      "Percentage:  28.586332811684926  %\n",
      "Percentage:  28.63849765258216  %\n",
      "Percentage:  28.690662493479394  %\n",
      "Percentage:  28.74282733437663  %\n",
      "Percentage:  28.794992175273865  %\n",
      "Percentage:  28.8471570161711  %\n",
      "Percentage:  28.899321857068337  %\n",
      "Percentage:  28.95148669796557  %\n",
      "Percentage:  29.003651538862808  %\n",
      "Percentage:  29.055816379760042  %\n",
      "Percentage:  29.107981220657276  %\n",
      "Percentage:  29.160146061554514  %\n",
      "Percentage:  29.212310902451748  %\n",
      "Percentage:  29.26447574334898  %\n",
      "Percentage:  29.31664058424622  %\n",
      "Percentage:  29.368805425143453  %\n",
      "Percentage:  29.420970266040687  %\n",
      "Percentage:  29.473135106937924  %\n",
      "Percentage:  29.52529994783516  %\n",
      "Percentage:  29.577464788732396  %\n",
      "Percentage:  29.62962962962963  %\n",
      "Percentage:  29.681794470526864  %\n",
      "Percentage:  29.7339593114241  %\n",
      "Percentage:  29.786124152321335  %\n",
      "Percentage:  29.83828899321857  %\n",
      "Percentage:  29.890453834115807  %\n",
      "Percentage:  29.94261867501304  %\n",
      "Percentage:  29.994783515910278  %\n",
      "Percentage:  30.046948356807512  %\n",
      "Percentage:  30.099113197704746  %\n",
      "Percentage:  30.151278038601983  %\n",
      "Percentage:  30.203442879499217  %\n",
      "Percentage:  30.25560772039645  %\n",
      "Percentage:  30.30777256129369  %\n",
      "Percentage:  30.359937402190923  %\n",
      "Percentage:  30.41210224308816  %\n",
      "Percentage:  30.464267083985394  %\n",
      "Percentage:  30.516431924882628  %\n",
      "Percentage:  30.568596765779866  %\n",
      "Percentage:  30.6207616066771  %\n",
      "Percentage:  30.672926447574334  %\n",
      "Percentage:  30.72509128847157  %\n",
      "Percentage:  30.777256129368805  %\n",
      "Percentage:  30.829420970266042  %\n",
      "Percentage:  30.881585811163276  %\n",
      "Percentage:  30.93375065206051  %\n",
      "Percentage:  30.985915492957748  %\n",
      "Percentage:  31.03808033385498  %\n",
      "Percentage:  31.090245174752216  %\n",
      "Percentage:  31.142410015649453  %\n",
      "Percentage:  31.194574856546687  %\n",
      "Percentage:  31.24673969744392  %\n",
      "Percentage:  31.29890453834116  %\n",
      "Percentage:  31.351069379238393  %\n",
      "Percentage:  31.40323422013563  %\n",
      "Percentage:  31.455399061032864  %\n",
      "Percentage:  31.507563901930098  %\n",
      "Percentage:  31.559728742827335  %\n",
      "Percentage:  31.61189358372457  %\n",
      "Percentage:  31.664058424621803  %\n",
      "Percentage:  31.71622326551904  %\n",
      "Percentage:  31.768388106416275  %\n",
      "Percentage:  31.820552947313512  %\n",
      "Percentage:  31.872717788210746  %\n",
      "Percentage:  31.92488262910798  %\n",
      "Percentage:  31.977047470005218  %\n",
      "Percentage:  32.02921231090245  %\n",
      "Percentage:  32.081377151799686  %\n",
      "Percentage:  32.13354199269692  %\n",
      "Percentage:  32.18570683359416  %\n",
      "Percentage:  32.237871674491394  %\n",
      "Percentage:  32.29003651538863  %\n",
      "Percentage:  32.34220135628586  %\n",
      "Percentage:  32.394366197183096  %\n",
      "Percentage:  32.44653103808034  %\n",
      "Percentage:  32.49869587897757  %\n",
      "Percentage:  32.550860719874805  %\n",
      "Percentage:  32.60302556077204  %\n",
      "Percentage:  32.65519040166927  %\n",
      "Percentage:  32.70735524256651  %\n",
      "Percentage:  32.75952008346375  %\n",
      "Percentage:  32.81168492436098  %\n",
      "Percentage:  32.863849765258216  %\n",
      "Percentage:  32.91601460615545  %\n",
      "Percentage:  32.968179447052684  %\n",
      "Percentage:  33.020344287949925  %\n",
      "Percentage:  33.07250912884716  %\n",
      "Percentage:  33.12467396974439  %\n",
      "Percentage:  33.17683881064163  %\n",
      "Percentage:  33.22900365153886  %\n",
      "Percentage:  33.281168492436095  %\n",
      "Percentage:  33.333333333333336  %\n",
      "Percentage:  33.38549817423057  %\n",
      "Percentage:  33.437663015127804  %\n",
      "Percentage:  33.48982785602504  %\n",
      "Percentage:  33.54199269692227  %\n",
      "Percentage:  33.59415753781951  %\n",
      "Percentage:  33.64632237871675  %\n",
      "Percentage:  33.69848721961398  %\n",
      "Percentage:  33.750652060511214  %\n",
      "Percentage:  33.80281690140845  %\n",
      "Percentage:  33.85498174230569  %\n",
      "Percentage:  33.90714658320292  %\n",
      "Percentage:  33.95931142410016  %\n",
      "Percentage:  34.01147626499739  %\n",
      "Percentage:  34.063641105894625  %\n",
      "Percentage:  34.11580594679186  %\n",
      "Percentage:  34.1679707876891  %\n",
      "Percentage:  34.220135628586334  %\n",
      "Percentage:  34.27230046948357  %\n",
      "Percentage:  34.3244653103808  %\n",
      "Percentage:  34.376630151278036  %\n",
      "Percentage:  34.42879499217528  %\n",
      "Percentage:  34.48095983307251  %\n",
      "Percentage:  34.533124673969745  %\n",
      "Percentage:  34.58528951486698  %\n",
      "Percentage:  34.63745435576421  %\n",
      "Percentage:  34.68961919666145  %\n",
      "Percentage:  34.74178403755869  %\n",
      "Percentage:  34.79394887845592  %\n",
      "Percentage:  34.846113719353156  %\n",
      "Percentage:  34.89827856025039  %\n",
      "Percentage:  34.95044340114762  %\n",
      "Percentage:  35.002608242044865  %\n",
      "Percentage:  35.0547730829421  %\n",
      "Percentage:  35.10693792383933  %\n",
      "Percentage:  35.159102764736566  %\n",
      "Percentage:  35.2112676056338  %\n",
      "Percentage:  35.26343244653104  %\n",
      "Percentage:  35.315597287428275  %\n",
      "Percentage:  35.36776212832551  %\n",
      "Percentage:  35.41992696922274  %\n",
      "Percentage:  35.47209181011998  %\n",
      "Percentage:  35.52425665101721  %\n",
      "Percentage:  35.57642149191445  %\n",
      "Percentage:  35.628586332811686  %\n",
      "Percentage:  35.68075117370892  %\n",
      "Percentage:  35.732916014606154  %\n",
      "Percentage:  35.78508085550339  %\n",
      "Percentage:  35.83724569640063  %\n",
      "Percentage:  35.88941053729786  %\n",
      "Percentage:  35.9415753781951  %\n",
      "Percentage:  35.99374021909233  %\n",
      "Percentage:  36.045905059989565  %\n",
      "Percentage:  36.098069900886806  %\n",
      "Percentage:  36.15023474178404  %\n",
      "Percentage:  36.202399582681274  %\n",
      "Percentage:  36.25456442357851  %\n",
      "Percentage:  36.30672926447574  %\n",
      "Percentage:  36.358894105372976  %\n",
      "Percentage:  36.41105894627022  %\n",
      "Percentage:  36.46322378716745  %\n",
      "Percentage:  36.515388628064684  %\n",
      "Percentage:  36.56755346896192  %\n",
      "Percentage:  36.61971830985915  %\n",
      "Percentage:  36.67188315075639  %\n",
      "Percentage:  36.72404799165363  %\n",
      "Percentage:  36.77621283255086  %\n",
      "Percentage:  36.828377673448095  %\n",
      "Percentage:  36.88054251434533  %\n",
      "Percentage:  36.93270735524256  %\n",
      "Percentage:  36.984872196139804  %\n",
      "Percentage:  37.03703703703704  %\n",
      "Percentage:  37.08920187793427  %\n",
      "Percentage:  37.141366718831506  %\n",
      "Percentage:  37.19353155972874  %\n",
      "Percentage:  37.24569640062598  %\n",
      "Percentage:  37.297861241523215  %\n",
      "Percentage:  37.35002608242045  %\n",
      "Percentage:  37.40219092331768  %\n",
      "Percentage:  37.45435576421492  %\n",
      "Percentage:  37.50652060511216  %\n",
      "Percentage:  37.55868544600939  %\n",
      "Percentage:  37.610850286906626  %\n",
      "Percentage:  37.66301512780386  %\n",
      "Percentage:  37.715179968701094  %\n",
      "Percentage:  37.76734480959833  %\n",
      "Percentage:  37.81950965049557  %\n",
      "Percentage:  37.8716744913928  %\n",
      "Percentage:  37.92383933229004  %\n",
      "Percentage:  37.97600417318727  %\n",
      "Percentage:  38.028169014084504  %\n",
      "Percentage:  38.080333854981745  %\n",
      "Percentage:  38.13249869587898  %\n",
      "Percentage:  38.18466353677621  %\n",
      "Percentage:  38.23682837767345  %\n",
      "Percentage:  38.28899321857068  %\n",
      "Percentage:  38.341158059467915  %\n",
      "Percentage:  38.393322900365156  %\n",
      "Percentage:  38.44548774126239  %\n",
      "Percentage:  38.497652582159624  %\n",
      "Percentage:  38.54981742305686  %\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Percentage:  38.60198226395409  %\n",
      "Percentage:  38.65414710485133  %\n",
      "Percentage:  38.70631194574857  %\n",
      "Percentage:  38.7584767866458  %\n",
      "Percentage:  38.810641627543035  %\n",
      "Percentage:  38.86280646844027  %\n",
      "Percentage:  38.91497130933751  %\n",
      "Percentage:  38.967136150234744  %\n",
      "Percentage:  39.01930099113198  %\n",
      "Percentage:  39.07146583202921  %\n",
      "Percentage:  39.123630672926446  %\n",
      "Percentage:  39.17579551382368  %\n",
      "Percentage:  39.22796035472092  %\n",
      "Percentage:  39.280125195618155  %\n",
      "Percentage:  39.33229003651539  %\n",
      "Percentage:  39.38445487741262  %\n",
      "Percentage:  39.436619718309856  %\n",
      "Percentage:  39.4887845592071  %\n",
      "Percentage:  39.54094940010433  %\n",
      "Percentage:  39.593114241001565  %\n",
      "Percentage:  39.6452790818988  %\n",
      "Percentage:  39.69744392279603  %\n",
      "Percentage:  39.749608763693274  %\n",
      "Percentage:  39.80177360459051  %\n",
      "Percentage:  39.85393844548774  %\n",
      "Percentage:  39.906103286384976  %\n",
      "Percentage:  39.95826812728221  %\n",
      "Percentage:  40.010432968179444  %\n",
      "Percentage:  40.062597809076685  %\n",
      "Percentage:  40.11476264997392  %\n",
      "Percentage:  40.16692749087115  %\n",
      "Percentage:  40.21909233176839  %\n",
      "Percentage:  40.27125717266562  %\n",
      "Percentage:  40.32342201356286  %\n",
      "Percentage:  40.375586854460096  %\n",
      "Percentage:  40.42775169535733  %\n",
      "Percentage:  40.479916536254564  %\n",
      "Percentage:  40.5320813771518  %\n",
      "Percentage:  40.58424621804903  %\n",
      "Percentage:  40.63641105894627  %\n",
      "Percentage:  40.68857589984351  %\n",
      "Percentage:  40.74074074074074  %\n",
      "Percentage:  40.792905581637974  %\n",
      "Percentage:  40.84507042253521  %\n",
      "Percentage:  40.89723526343245  %\n",
      "Percentage:  40.94940010432968  %\n",
      "Percentage:  41.00156494522692  %\n",
      "Percentage:  41.05372978612415  %\n",
      "Percentage:  41.105894627021385  %\n",
      "Percentage:  41.158059467918626  %\n",
      "Percentage:  41.21022430881586  %\n",
      "Percentage:  41.262389149713094  %\n",
      "Percentage:  41.31455399061033  %\n",
      "Percentage:  41.36671883150756  %\n",
      "Percentage:  41.418883672404796  %\n",
      "Percentage:  41.47104851330204  %\n",
      "Percentage:  41.52321335419927  %\n",
      "Percentage:  41.575378195096505  %\n",
      "Percentage:  41.62754303599374  %\n",
      "Percentage:  41.67970787689097  %\n",
      "Percentage:  41.731872717788214  %\n",
      "Percentage:  41.78403755868545  %\n",
      "Percentage:  41.83620239958268  %\n",
      "Percentage:  41.888367240479916  %\n",
      "Percentage:  41.94053208137715  %\n",
      "Percentage:  41.992696922274384  %\n",
      "Percentage:  42.044861763171625  %\n",
      "Percentage:  42.09702660406886  %\n",
      "Percentage:  42.14919144496609  %\n",
      "Percentage:  42.201356285863326  %\n",
      "Percentage:  42.25352112676056  %\n",
      "Percentage:  42.3056859676578  %\n",
      "Percentage:  42.357850808555035  %\n",
      "Percentage:  42.41001564945227  %\n",
      "Percentage:  42.4621804903495  %\n",
      "Percentage:  42.51434533124674  %\n",
      "Percentage:  42.56651017214398  %\n",
      "Percentage:  42.61867501304121  %\n",
      "Percentage:  42.670839853938446  %\n",
      "Percentage:  42.72300469483568  %\n",
      "Percentage:  42.775169535732914  %\n",
      "Percentage:  42.82733437663015  %\n",
      "Percentage:  42.87949921752739  %\n",
      "Percentage:  42.93166405842462  %\n",
      "Percentage:  42.98382889932186  %\n",
      "Percentage:  43.03599374021909  %\n",
      "Percentage:  43.088158581116325  %\n",
      "Percentage:  43.140323422013566  %\n",
      "Percentage:  43.1924882629108  %\n",
      "Percentage:  43.244653103808034  %\n",
      "Percentage:  43.29681794470527  %\n",
      "Percentage:  43.3489827856025  %\n",
      "Percentage:  43.40114762649974  %\n",
      "Percentage:  43.45331246739698  %\n",
      "Percentage:  43.50547730829421  %\n",
      "Percentage:  43.557642149191445  %\n",
      "Percentage:  43.60980699008868  %\n",
      "Percentage:  43.66197183098591  %\n",
      "Percentage:  43.71413667188315  %\n",
      "Percentage:  43.76630151278039  %\n",
      "Percentage:  43.81846635367762  %\n",
      "Percentage:  43.870631194574855  %\n",
      "Percentage:  43.92279603547209  %\n",
      "Percentage:  43.97496087636933  %\n",
      "Percentage:  44.027125717266564  %\n",
      "Percentage:  44.0792905581638  %\n",
      "Percentage:  44.13145539906103  %\n",
      "Percentage:  44.183620239958266  %\n",
      "Percentage:  44.2357850808555  %\n",
      "Percentage:  44.28794992175274  %\n",
      "Percentage:  44.340114762649975  %\n",
      "Percentage:  44.39227960354721  %\n",
      "Percentage:  44.44444444444444  %\n",
      "Percentage:  44.49660928534168  %\n",
      "Percentage:  44.54877412623892  %\n",
      "Percentage:  44.60093896713615  %\n",
      "Percentage:  44.653103808033386  %\n",
      "Percentage:  44.70526864893062  %\n",
      "Percentage:  44.757433489827854  %\n",
      "Percentage:  44.809598330725095  %\n",
      "Percentage:  44.86176317162233  %\n",
      "Percentage:  44.91392801251956  %\n",
      "Percentage:  44.9660928534168  %\n",
      "Percentage:  45.01825769431403  %\n",
      "Percentage:  45.070422535211264  %\n",
      "Percentage:  45.122587376108505  %\n",
      "Percentage:  45.17475221700574  %\n",
      "Percentage:  45.22691705790297  %\n",
      "Percentage:  45.27908189880021  %\n",
      "Percentage:  45.33124673969744  %\n",
      "Percentage:  45.38341158059468  %\n",
      "Percentage:  45.435576421491916  %\n",
      "Percentage:  45.48774126238915  %\n",
      "Percentage:  45.539906103286384  %\n",
      "Percentage:  45.59207094418362  %\n",
      "Percentage:  45.64423578508085  %\n",
      "Percentage:  45.69640062597809  %\n",
      "Percentage:  45.74856546687533  %\n",
      "Percentage:  45.80073030777256  %\n",
      "Percentage:  45.852895148669795  %\n",
      "Percentage:  45.90505998956703  %\n",
      "Percentage:  45.95722483046427  %\n",
      "Percentage:  46.009389671361504  %\n",
      "Percentage:  46.06155451225874  %\n",
      "Percentage:  46.11371935315597  %\n",
      "Percentage:  46.165884194053206  %\n",
      "Percentage:  46.21804903495045  %\n",
      "Percentage:  46.27021387584768  %\n",
      "Percentage:  46.322378716744915  %\n",
      "Percentage:  46.37454355764215  %\n",
      "Percentage:  46.42670839853938  %\n",
      "Percentage:  46.478873239436616  %\n",
      "Percentage:  46.53103808033386  %\n",
      "Percentage:  46.58320292123109  %\n",
      "Percentage:  46.635367762128325  %\n",
      "Percentage:  46.68753260302556  %\n",
      "Percentage:  46.73969744392279  %\n",
      "Percentage:  46.791862284820034  %\n",
      "Percentage:  46.84402712571727  %\n",
      "Percentage:  46.8961919666145  %\n",
      "Percentage:  46.948356807511736  %\n",
      "Percentage:  47.00052164840897  %\n",
      "Percentage:  47.05268648930621  %\n",
      "Percentage:  47.104851330203445  %\n",
      "Percentage:  47.15701617110068  %\n",
      "Percentage:  47.20918101199791  %\n",
      "Percentage:  47.26134585289515  %\n",
      "Percentage:  47.31351069379238  %\n",
      "Percentage:  47.36567553468962  %\n",
      "Percentage:  47.417840375586856  %\n",
      "Percentage:  47.47000521648409  %\n",
      "Percentage:  47.522170057381324  %\n",
      "Percentage:  47.57433489827856  %\n",
      "Percentage:  47.6264997391758  %\n",
      "Percentage:  47.67866458007303  %\n",
      "Percentage:  47.73082942097027  %\n",
      "Percentage:  47.7829942618675  %\n",
      "Percentage:  47.835159102764734  %\n",
      "Percentage:  47.88732394366197  %\n",
      "Percentage:  47.93948878455921  %\n",
      "Percentage:  47.99165362545644  %\n",
      "Percentage:  48.04381846635368  %\n",
      "Percentage:  48.09598330725091  %\n",
      "Percentage:  48.148148148148145  %\n",
      "Percentage:  48.200312989045386  %\n",
      "Percentage:  48.25247782994262  %\n",
      "Percentage:  48.304642670839854  %\n",
      "Percentage:  48.35680751173709  %\n",
      "Percentage:  48.40897235263432  %\n",
      "Percentage:  48.46113719353156  %\n",
      "Percentage:  48.5133020344288  %\n",
      "Percentage:  48.56546687532603  %\n",
      "Percentage:  48.617631716223265  %\n",
      "Percentage:  48.6697965571205  %\n",
      "Percentage:  48.72196139801773  %\n",
      "Percentage:  48.774126238914974  %\n",
      "Percentage:  48.82629107981221  %\n",
      "Percentage:  48.87845592070944  %\n",
      "Percentage:  48.930620761606676  %\n",
      "Percentage:  48.98278560250391  %\n",
      "Percentage:  49.03495044340115  %\n",
      "Percentage:  49.087115284298385  %\n",
      "Percentage:  49.13928012519562  %\n",
      "Percentage:  49.19144496609285  %\n",
      "Percentage:  49.24360980699009  %\n",
      "Percentage:  49.29577464788732  %\n",
      "Percentage:  49.34793948878456  %\n",
      "Percentage:  49.400104329681795  %\n",
      "Percentage:  49.45226917057903  %\n",
      "Percentage:  49.50443401147626  %\n",
      "Percentage:  49.5565988523735  %\n",
      "Percentage:  49.60876369327074  %\n",
      "Percentage:  49.66092853416797  %\n",
      "Percentage:  49.713093375065206  %\n",
      "Percentage:  49.76525821596244  %\n",
      "Percentage:  49.817423056859674  %\n",
      "Percentage:  49.869587897756915  %\n",
      "Percentage:  49.92175273865415  %\n",
      "Percentage:  49.97391757955138  %\n",
      "Percentage:  50.02608242044862  %\n",
      "Percentage:  50.07824726134585  %\n",
      "Percentage:  50.130412102243085  %\n",
      "Percentage:  50.182576943140326  %\n",
      "Percentage:  50.23474178403756  %\n",
      "Percentage:  50.286906624934794  %\n",
      "Percentage:  50.33907146583203  %\n",
      "Percentage:  50.39123630672926  %\n",
      "Percentage:  50.4434011476265  %\n",
      "Percentage:  50.49556598852374  %\n",
      "Percentage:  50.54773082942097  %\n",
      "Percentage:  50.599895670318205  %\n",
      "Percentage:  50.65206051121544  %\n",
      "Percentage:  50.70422535211268  %\n",
      "Percentage:  50.75639019300991  %\n",
      "Percentage:  50.80855503390715  %\n",
      "Percentage:  50.86071987480438  %\n",
      "Percentage:  50.912884715701615  %\n",
      "Percentage:  50.96504955659885  %\n",
      "Percentage:  51.01721439749609  %\n",
      "Percentage:  51.069379238393324  %\n",
      "Percentage:  51.12154407929056  %\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Percentage:  51.17370892018779  %\n",
      "Percentage:  51.225873761085026  %\n",
      "Percentage:  51.27803860198227  %\n",
      "Percentage:  51.3302034428795  %\n",
      "Percentage:  51.382368283776735  %\n",
      "Percentage:  51.43453312467397  %\n",
      "Percentage:  51.4866979655712  %\n",
      "Percentage:  51.53886280646844  %\n",
      "Percentage:  51.59102764736568  %\n",
      "Percentage:  51.64319248826291  %\n",
      "Percentage:  51.695357329160146  %\n",
      "Percentage:  51.74752217005738  %\n",
      "Percentage:  51.799687010954614  %\n",
      "Percentage:  51.851851851851855  %\n",
      "Percentage:  51.90401669274909  %\n",
      "Percentage:  51.95618153364632  %\n",
      "Percentage:  52.00834637454356  %\n",
      "Percentage:  52.06051121544079  %\n",
      "Percentage:  52.11267605633803  %\n",
      "Percentage:  52.164840897235266  %\n",
      "Percentage:  52.2170057381325  %\n",
      "Percentage:  52.26917057902973  %\n",
      "Percentage:  52.32133541992697  %\n",
      "Percentage:  52.3735002608242  %\n",
      "Percentage:  52.42566510172144  %\n",
      "Percentage:  52.477829942618676  %\n",
      "Percentage:  52.52999478351591  %\n",
      "Percentage:  52.582159624413144  %\n",
      "Percentage:  52.63432446531038  %\n",
      "Percentage:  52.68648930620762  %\n",
      "Percentage:  52.73865414710485  %\n",
      "Percentage:  52.79081898800209  %\n",
      "Percentage:  52.84298382889932  %\n",
      "Percentage:  52.895148669796555  %\n",
      "Percentage:  52.94731351069379  %\n",
      "Percentage:  52.99947835159103  %\n",
      "Percentage:  53.051643192488264  %\n",
      "Percentage:  53.1038080333855  %\n",
      "Percentage:  53.15597287428273  %\n",
      "Percentage:  53.208137715179966  %\n",
      "Percentage:  53.26030255607721  %\n",
      "Percentage:  53.31246739697444  %\n",
      "Percentage:  53.364632237871675  %\n",
      "Percentage:  53.41679707876891  %\n",
      "Percentage:  53.46896191966614  %\n",
      "Percentage:  53.521126760563384  %\n",
      "Percentage:  53.57329160146062  %\n",
      "Percentage:  53.62545644235785  %\n",
      "Percentage:  53.677621283255085  %\n",
      "Percentage:  53.72978612415232  %\n",
      "Percentage:  53.78195096504955  %\n",
      "Percentage:  53.834115805946794  %\n",
      "Percentage:  53.88628064684403  %\n",
      "Percentage:  53.93844548774126  %\n",
      "Percentage:  53.990610328638496  %\n",
      "Percentage:  54.04277516953573  %\n",
      "Percentage:  54.09494001043297  %\n",
      "Percentage:  54.147104851330205  %\n",
      "Percentage:  54.19926969222744  %\n",
      "Percentage:  54.25143453312467  %\n",
      "Percentage:  54.30359937402191  %\n",
      "Percentage:  54.35576421491915  %\n",
      "Percentage:  54.40792905581638  %\n",
      "Percentage:  54.460093896713616  %\n",
      "Percentage:  54.51225873761085  %\n",
      "Percentage:  54.564423578508084  %\n",
      "Percentage:  54.61658841940532  %\n",
      "Percentage:  54.66875326030256  %\n",
      "Percentage:  54.72091810119979  %\n",
      "Percentage:  54.77308294209703  %\n",
      "Percentage:  54.82524778299426  %\n",
      "Percentage:  54.877412623891495  %\n",
      "Percentage:  54.929577464788736  %\n",
      "Percentage:  54.98174230568597  %\n",
      "Percentage:  55.0339071465832  %\n",
      "Percentage:  55.08607198748044  %\n",
      "Percentage:  55.13823682837767  %\n",
      "Percentage:  55.190401669274905  %\n",
      "Percentage:  55.242566510172146  %\n",
      "Percentage:  55.29473135106938  %\n",
      "Percentage:  55.346896191966614  %\n",
      "Percentage:  55.39906103286385  %\n",
      "Percentage:  55.45122587376108  %\n",
      "Percentage:  55.50339071465832  %\n",
      "Percentage:  55.55555555555556  %\n",
      "Percentage:  55.60772039645279  %\n",
      "Percentage:  55.659885237350025  %\n",
      "Percentage:  55.71205007824726  %\n",
      "Percentage:  55.7642149191445  %\n",
      "Percentage:  55.816379760041734  %\n",
      "Percentage:  55.86854460093897  %\n",
      "Percentage:  55.9207094418362  %\n",
      "Percentage:  55.972874282733436  %\n",
      "Percentage:  56.02503912363067  %\n",
      "Percentage:  56.07720396452791  %\n",
      "Percentage:  56.129368805425145  %\n",
      "Percentage:  56.18153364632238  %\n",
      "Percentage:  56.23369848721961  %\n",
      "Percentage:  56.28586332811685  %\n",
      "Percentage:  56.33802816901409  %\n",
      "Percentage:  56.39019300991132  %\n",
      "Percentage:  56.442357850808555  %\n",
      "Percentage:  56.49452269170579  %\n",
      "Percentage:  56.54668753260302  %\n",
      "Percentage:  56.59885237350026  %\n",
      "Percentage:  56.6510172143975  %\n",
      "Percentage:  56.70318205529473  %\n",
      "Percentage:  56.755346896191966  %\n",
      "Percentage:  56.8075117370892  %\n",
      "Percentage:  56.859676577986434  %\n",
      "Percentage:  56.911841418883675  %\n",
      "Percentage:  56.96400625978091  %\n",
      "Percentage:  57.01617110067814  %\n",
      "Percentage:  57.06833594157538  %\n",
      "Percentage:  57.12050078247261  %\n",
      "Percentage:  57.17266562336985  %\n",
      "Percentage:  57.224830464267086  %\n",
      "Percentage:  57.27699530516432  %\n",
      "Percentage:  57.329160146061554  %\n",
      "Percentage:  57.38132498695879  %\n",
      "Percentage:  57.43348982785602  %\n",
      "Percentage:  57.48565466875326  %\n",
      "Percentage:  57.5378195096505  %\n",
      "Percentage:  57.58998435054773  %\n",
      "Percentage:  57.642149191444965  %\n",
      "Percentage:  57.6943140323422  %\n",
      "Percentage:  57.74647887323944  %\n",
      "Percentage:  57.798643714136674  %\n",
      "Percentage:  57.85080855503391  %\n",
      "Percentage:  57.90297339593114  %\n",
      "Percentage:  57.955138236828375  %\n",
      "Percentage:  58.007303077725616  %\n",
      "Percentage:  58.05946791862285  %\n",
      "Percentage:  58.111632759520084  %\n",
      "Percentage:  58.16379760041732  %\n",
      "Percentage:  58.21596244131455  %\n",
      "Percentage:  58.268127282211786  %\n",
      "Percentage:  58.32029212310903  %\n",
      "Percentage:  58.37245696400626  %\n",
      "Percentage:  58.424621804903495  %\n",
      "Percentage:  58.47678664580073  %\n",
      "Percentage:  58.52895148669796  %\n",
      "Percentage:  58.581116327595204  %\n",
      "Percentage:  58.63328116849244  %\n",
      "Percentage:  58.68544600938967  %\n",
      "Percentage:  58.737610850286906  %\n",
      "Percentage:  58.78977569118414  %\n",
      "Percentage:  58.841940532081374  %\n",
      "Percentage:  58.894105372978615  %\n",
      "Percentage:  58.94627021387585  %\n",
      "Percentage:  58.99843505477308  %\n",
      "Percentage:  59.05059989567032  %\n",
      "Percentage:  59.10276473656755  %\n",
      "Percentage:  59.15492957746479  %\n",
      "Percentage:  59.207094418362026  %\n",
      "Percentage:  59.25925925925926  %\n",
      "Percentage:  59.31142410015649  %\n",
      "Percentage:  59.36358894105373  %\n",
      "Percentage:  59.41575378195097  %\n",
      "Percentage:  59.4679186228482  %\n",
      "Percentage:  59.520083463745436  %\n",
      "Percentage:  59.57224830464267  %\n",
      "Percentage:  59.624413145539904  %\n",
      "Percentage:  59.67657798643714  %\n",
      "Percentage:  59.72874282733438  %\n",
      "Percentage:  59.78090766823161  %\n",
      "Percentage:  59.83307250912885  %\n",
      "Percentage:  59.88523735002608  %\n",
      "Percentage:  59.937402190923315  %\n",
      "Percentage:  59.989567031820556  %\n",
      "Percentage:  60.04173187271779  %\n",
      "Percentage:  60.093896713615024  %\n",
      "Percentage:  60.14606155451226  %\n",
      "Percentage:  60.19822639540949  %\n",
      "Percentage:  60.250391236306726  %\n",
      "Percentage:  60.30255607720397  %\n",
      "Percentage:  60.3547209181012  %\n",
      "Percentage:  60.406885758998435  %\n",
      "Percentage:  60.45905059989567  %\n",
      "Percentage:  60.5112154407929  %\n",
      "Percentage:  60.563380281690144  %\n",
      "Percentage:  60.61554512258738  %\n",
      "Percentage:  60.66770996348461  %\n",
      "Percentage:  60.719874804381845  %\n",
      "Percentage:  60.77203964527908  %\n",
      "Percentage:  60.82420448617632  %\n",
      "Percentage:  60.876369327073554  %\n",
      "Percentage:  60.92853416797079  %\n",
      "Percentage:  60.98069900886802  %\n",
      "Percentage:  61.032863849765256  %\n",
      "Percentage:  61.08502869066249  %\n",
      "Percentage:  61.13719353155973  %\n",
      "Percentage:  61.189358372456965  %\n",
      "Percentage:  61.2415232133542  %\n",
      "Percentage:  61.29368805425143  %\n",
      "Percentage:  61.34585289514867  %\n",
      "Percentage:  61.39801773604591  %\n",
      "Percentage:  61.45018257694314  %\n",
      "Percentage:  61.502347417840376  %\n",
      "Percentage:  61.55451225873761  %\n",
      "Percentage:  61.606677099634844  %\n",
      "Percentage:  61.658841940532085  %\n",
      "Percentage:  61.71100678142932  %\n",
      "Percentage:  61.76317162232655  %\n",
      "Percentage:  61.81533646322379  %\n",
      "Percentage:  61.86750130412102  %\n",
      "Percentage:  61.919666145018255  %\n",
      "Percentage:  61.971830985915496  %\n",
      "Percentage:  62.02399582681273  %\n",
      "Percentage:  62.07616066770996  %\n",
      "Percentage:  62.1283255086072  %\n",
      "Percentage:  62.18049034950443  %\n",
      "Percentage:  62.23265519040167  %\n",
      "Percentage:  62.284820031298906  %\n",
      "Percentage:  62.33698487219614  %\n",
      "Percentage:  62.389149713093374  %\n",
      "Percentage:  62.44131455399061  %\n",
      "Percentage:  62.49347939488784  %\n",
      "Percentage:  62.54564423578508  %\n",
      "Percentage:  62.59780907668232  %\n",
      "Percentage:  62.64997391757955  %\n",
      "Percentage:  62.702138758476785  %\n",
      "Percentage:  62.75430359937402  %\n",
      "Percentage:  62.80646844027126  %\n",
      "Percentage:  62.858633281168494  %\n",
      "Percentage:  62.91079812206573  %\n",
      "Percentage:  62.96296296296296  %\n",
      "Percentage:  63.015127803860196  %\n",
      "Percentage:  63.06729264475744  %\n",
      "Percentage:  63.11945748565467  %\n",
      "Percentage:  63.171622326551905  %\n",
      "Percentage:  63.22378716744914  %\n",
      "Percentage:  63.27595200834637  %\n",
      "Percentage:  63.32811684924361  %\n",
      "Percentage:  63.38028169014085  %\n",
      "Percentage:  63.43244653103808  %\n",
      "Percentage:  63.484611371935316  %\n",
      "Percentage:  63.53677621283255  %\n",
      "Percentage:  63.58894105372978  %\n",
      "Percentage:  63.641105894627024  %\n",
      "Percentage:  63.69327073552426  %\n",
      "Percentage:  63.74543557642149  %\n",
      "Percentage:  63.797600417318726  %\n",
      "Percentage:  63.84976525821596  %\n",
      "Percentage:  63.901930099113194  %\n",
      "Percentage:  63.954094940010435  %\n",
      "Percentage:  64.00625978090767  %\n",
      "Percentage:  64.0584246218049  %\n",
      "Percentage:  64.11058946270214  %\n",
      "Percentage:  64.16275430359937  %\n",
      "Percentage:  64.2149191444966  %\n",
      "Percentage:  64.26708398539384  %\n",
      "Percentage:  64.31924882629107  %\n",
      "Percentage:  64.37141366718832  %\n",
      "Percentage:  64.42357850808555  %\n",
      "Percentage:  64.47574334898279  %\n",
      "Percentage:  64.52790818988002  %\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Percentage:  64.58007303077726  %\n",
      "Percentage:  64.63223787167449  %\n",
      "Percentage:  64.68440271257172  %\n",
      "Percentage:  64.73656755346896  %\n",
      "Percentage:  64.78873239436619  %\n",
      "Percentage:  64.84089723526343  %\n",
      "Percentage:  64.89306207616067  %\n",
      "Percentage:  64.94522691705791  %\n",
      "Percentage:  64.99739175795514  %\n",
      "Percentage:  65.04955659885238  %\n",
      "Percentage:  65.10172143974961  %\n",
      "Percentage:  65.15388628064684  %\n",
      "Percentage:  65.20605112154408  %\n",
      "Percentage:  65.25821596244131  %\n",
      "Percentage:  65.31038080333855  %\n",
      "Percentage:  65.36254564423578  %\n",
      "Percentage:  65.41471048513301  %\n",
      "Percentage:  65.46687532603026  %\n",
      "Percentage:  65.5190401669275  %\n",
      "Percentage:  65.57120500782473  %\n",
      "Percentage:  65.62336984872196  %\n",
      "Percentage:  65.6755346896192  %\n",
      "Percentage:  65.72769953051643  %\n",
      "Percentage:  65.77986437141367  %\n",
      "Percentage:  65.8320292123109  %\n",
      "Percentage:  65.88419405320813  %\n",
      "Percentage:  65.93635889410537  %\n",
      "Percentage:  65.9885237350026  %\n",
      "Percentage:  66.04068857589985  %\n",
      "Percentage:  66.09285341679708  %\n",
      "Percentage:  66.14501825769432  %\n",
      "Percentage:  66.19718309859155  %\n",
      "Percentage:  66.24934793948879  %\n",
      "Percentage:  66.30151278038602  %\n",
      "Percentage:  66.35367762128325  %\n",
      "Percentage:  66.40584246218049  %\n",
      "Percentage:  66.45800730307772  %\n",
      "Percentage:  66.51017214397496  %\n",
      "Percentage:  66.56233698487219  %\n",
      "Percentage:  66.61450182576944  %\n",
      "Percentage:  66.66666666666667  %\n",
      "Percentage:  66.7188315075639  %\n",
      "Percentage:  66.77099634846114  %\n",
      "Percentage:  66.82316118935837  %\n",
      "Percentage:  66.87532603025561  %\n",
      "Percentage:  66.92749087115284  %\n",
      "Percentage:  66.97965571205008  %\n",
      "Percentage:  67.03182055294731  %\n",
      "Percentage:  67.08398539384454  %\n",
      "Percentage:  67.13615023474179  %\n",
      "Percentage:  67.18831507563903  %\n",
      "Percentage:  67.24047991653626  %\n",
      "Percentage:  67.2926447574335  %\n",
      "Percentage:  67.34480959833073  %\n",
      "Percentage:  67.39697443922796  %\n",
      "Percentage:  67.4491392801252  %\n",
      "Percentage:  67.50130412102243  %\n",
      "Percentage:  67.55346896191966  %\n",
      "Percentage:  67.6056338028169  %\n",
      "Percentage:  67.65779864371413  %\n",
      "Percentage:  67.70996348461138  %\n",
      "Percentage:  67.76212832550861  %\n",
      "Percentage:  67.81429316640585  %\n",
      "Percentage:  67.86645800730308  %\n",
      "Percentage:  67.91862284820031  %\n",
      "Percentage:  67.97078768909755  %\n",
      "Percentage:  68.02295252999478  %\n",
      "Percentage:  68.07511737089202  %\n",
      "Percentage:  68.12728221178925  %\n",
      "Percentage:  68.17944705268648  %\n",
      "Percentage:  68.23161189358372  %\n",
      "Percentage:  68.28377673448097  %\n",
      "Percentage:  68.3359415753782  %\n",
      "Percentage:  68.38810641627543  %\n",
      "Percentage:  68.44027125717267  %\n",
      "Percentage:  68.4924360980699  %\n",
      "Percentage:  68.54460093896714  %\n",
      "Percentage:  68.59676577986437  %\n",
      "Percentage:  68.6489306207616  %\n",
      "Percentage:  68.70109546165884  %\n",
      "Percentage:  68.75326030255607  %\n",
      "Percentage:  68.8054251434533  %\n",
      "Percentage:  68.85758998435055  %\n",
      "Percentage:  68.90975482524779  %\n",
      "Percentage:  68.96191966614502  %\n",
      "Percentage:  69.01408450704226  %\n",
      "Percentage:  69.06624934793949  %\n",
      "Percentage:  69.11841418883672  %\n",
      "Percentage:  69.17057902973396  %\n",
      "Percentage:  69.22274387063119  %\n",
      "Percentage:  69.27490871152843  %\n",
      "Percentage:  69.32707355242566  %\n",
      "Percentage:  69.3792383933229  %\n",
      "Percentage:  69.43140323422014  %\n",
      "Percentage:  69.48356807511738  %\n",
      "Percentage:  69.53573291601461  %\n",
      "Percentage:  69.58789775691184  %\n",
      "Percentage:  69.64006259780908  %\n",
      "Percentage:  69.69222743870631  %\n",
      "Percentage:  69.74439227960355  %\n",
      "Percentage:  69.79655712050078  %\n",
      "Percentage:  69.84872196139801  %\n",
      "Percentage:  69.90088680229525  %\n",
      "Percentage:  69.9530516431925  %\n",
      "Percentage:  70.00521648408973  %\n",
      "Percentage:  70.05738132498696  %\n",
      "Percentage:  70.1095461658842  %\n",
      "Percentage:  70.16171100678143  %\n",
      "Percentage:  70.21387584767866  %\n",
      "Percentage:  70.2660406885759  %\n",
      "Percentage:  70.31820552947313  %\n",
      "Percentage:  70.37037037037037  %\n",
      "Percentage:  70.4225352112676  %\n",
      "Percentage:  70.47470005216483  %\n",
      "Percentage:  70.52686489306208  %\n",
      "Percentage:  70.57902973395932  %\n",
      "Percentage:  70.63119457485655  %\n",
      "Percentage:  70.68335941575378  %\n",
      "Percentage:  70.73552425665102  %\n",
      "Percentage:  70.78768909754825  %\n",
      "Percentage:  70.83985393844549  %\n",
      "Percentage:  70.89201877934272  %\n",
      "Percentage:  70.94418362023995  %\n",
      "Percentage:  70.99634846113719  %\n",
      "Percentage:  71.04851330203442  %\n",
      "Percentage:  71.10067814293167  %\n",
      "Percentage:  71.1528429838289  %\n",
      "Percentage:  71.20500782472614  %\n",
      "Percentage:  71.25717266562337  %\n",
      "Percentage:  71.3093375065206  %\n",
      "Percentage:  71.36150234741784  %\n",
      "Percentage:  71.41366718831507  %\n",
      "Percentage:  71.46583202921231  %\n",
      "Percentage:  71.51799687010954  %\n",
      "Percentage:  71.57016171100678  %\n",
      "Percentage:  71.62232655190401  %\n",
      "Percentage:  71.67449139280126  %\n",
      "Percentage:  71.72665623369849  %\n",
      "Percentage:  71.77882107459573  %\n",
      "Percentage:  71.83098591549296  %\n",
      "Percentage:  71.8831507563902  %\n",
      "Percentage:  71.93531559728743  %\n",
      "Percentage:  71.98748043818466  %\n",
      "Percentage:  72.0396452790819  %\n",
      "Percentage:  72.09181011997913  %\n",
      "Percentage:  72.14397496087636  %\n",
      "Percentage:  72.19613980177361  %\n",
      "Percentage:  72.24830464267085  %\n",
      "Percentage:  72.30046948356808  %\n",
      "Percentage:  72.35263432446531  %\n",
      "Percentage:  72.40479916536255  %\n",
      "Percentage:  72.45696400625978  %\n",
      "Percentage:  72.50912884715702  %\n",
      "Percentage:  72.56129368805425  %\n",
      "Percentage:  72.61345852895148  %\n",
      "Percentage:  72.66562336984872  %\n",
      "Percentage:  72.71778821074595  %\n",
      "Percentage:  72.7699530516432  %\n",
      "Percentage:  72.82211789254043  %\n",
      "Percentage:  72.87428273343767  %\n",
      "Percentage:  72.9264475743349  %\n",
      "Percentage:  72.97861241523213  %\n",
      "Percentage:  73.03077725612937  %\n",
      "Percentage:  73.0829420970266  %\n",
      "Percentage:  73.13510693792384  %\n",
      "Percentage:  73.18727177882107  %\n",
      "Percentage:  73.2394366197183  %\n",
      "Percentage:  73.29160146061554  %\n",
      "Percentage:  73.34376630151279  %\n",
      "Percentage:  73.39593114241002  %\n",
      "Percentage:  73.44809598330725  %\n",
      "Percentage:  73.50026082420449  %\n",
      "Percentage:  73.55242566510172  %\n",
      "Percentage:  73.60459050599896  %\n",
      "Percentage:  73.65675534689619  %\n",
      "Percentage:  73.70892018779342  %\n",
      "Percentage:  73.76108502869066  %\n",
      "Percentage:  73.81324986958789  %\n",
      "Percentage:  73.86541471048513  %\n",
      "Percentage:  73.91757955138237  %\n",
      "Percentage:  73.96974439227961  %\n",
      "Percentage:  74.02190923317684  %\n",
      "Percentage:  74.07407407407408  %\n",
      "Percentage:  74.12623891497131  %\n",
      "Percentage:  74.17840375586854  %\n",
      "Percentage:  74.23056859676578  %\n",
      "Percentage:  74.28273343766301  %\n",
      "Percentage:  74.33489827856025  %\n",
      "Percentage:  74.38706311945748  %\n",
      "Percentage:  74.43922796035473  %\n",
      "Percentage:  74.49139280125196  %\n",
      "Percentage:  74.5435576421492  %\n",
      "Percentage:  74.59572248304643  %\n",
      "Percentage:  74.64788732394366  %\n",
      "Percentage:  74.7000521648409  %\n",
      "Percentage:  74.75221700573813  %\n",
      "Percentage:  74.80438184663537  %\n",
      "Percentage:  74.8565466875326  %\n",
      "Percentage:  74.90871152842983  %\n",
      "Percentage:  74.96087636932707  %\n",
      "Percentage:  75.01304121022432  %\n",
      "Percentage:  75.06520605112155  %\n",
      "Percentage:  75.11737089201878  %\n",
      "Percentage:  75.16953573291602  %\n",
      "Percentage:  75.22170057381325  %\n",
      "Percentage:  75.27386541471049  %\n",
      "Percentage:  75.32603025560772  %\n",
      "Percentage:  75.37819509650495  %\n",
      "Percentage:  75.43035993740219  %\n",
      "Percentage:  75.48252477829942  %\n",
      "Percentage:  75.53468961919666  %\n",
      "Percentage:  75.5868544600939  %\n",
      "Percentage:  75.63901930099114  %\n",
      "Percentage:  75.69118414188837  %\n",
      "Percentage:  75.7433489827856  %\n",
      "Percentage:  75.79551382368284  %\n",
      "Percentage:  75.84767866458007  %\n",
      "Percentage:  75.8998435054773  %\n",
      "Percentage:  75.95200834637454  %\n",
      "Percentage:  76.00417318727177  %\n",
      "Percentage:  76.05633802816901  %\n",
      "Percentage:  76.10850286906624  %\n",
      "Percentage:  76.16066770996349  %\n",
      "Percentage:  76.21283255086072  %\n",
      "Percentage:  76.26499739175796  %\n",
      "Percentage:  76.31716223265519  %\n",
      "Percentage:  76.36932707355243  %\n",
      "Percentage:  76.42149191444966  %\n",
      "Percentage:  76.4736567553469  %\n",
      "Percentage:  76.52582159624413  %\n",
      "Percentage:  76.57798643714136  %\n",
      "Percentage:  76.6301512780386  %\n",
      "Percentage:  76.68231611893583  %\n",
      "Percentage:  76.73448095983308  %\n",
      "Percentage:  76.78664580073031  %\n",
      "Percentage:  76.83881064162755  %\n",
      "Percentage:  76.89097548252478  %\n",
      "Percentage:  76.94314032342201  %\n",
      "Percentage:  76.99530516431925  %\n",
      "Percentage:  77.04747000521648  %\n",
      "Percentage:  77.09963484611372  %\n",
      "Percentage:  77.15179968701095  %\n",
      "Percentage:  77.20396452790818  %\n",
      "Percentage:  77.25612936880543  %\n",
      "Percentage:  77.30829420970267  %\n",
      "Percentage:  77.3604590505999  %\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Percentage:  77.41262389149713  %\n",
      "Percentage:  77.46478873239437  %\n",
      "Percentage:  77.5169535732916  %\n",
      "Percentage:  77.56911841418884  %\n",
      "Percentage:  77.62128325508607  %\n",
      "Percentage:  77.6734480959833  %\n",
      "Percentage:  77.72561293688054  %\n",
      "Percentage:  77.77777777777777  %\n",
      "Percentage:  77.82994261867502  %\n",
      "Percentage:  77.88210745957225  %\n",
      "Percentage:  77.93427230046949  %\n",
      "Percentage:  77.98643714136672  %\n",
      "Percentage:  78.03860198226396  %\n",
      "Percentage:  78.09076682316119  %\n",
      "Percentage:  78.14293166405842  %\n",
      "Percentage:  78.19509650495566  %\n",
      "Percentage:  78.24726134585289  %\n",
      "Percentage:  78.29942618675013  %\n",
      "Percentage:  78.35159102764736  %\n",
      "Percentage:  78.40375586854461  %\n",
      "Percentage:  78.45592070944184  %\n",
      "Percentage:  78.50808555033908  %\n",
      "Percentage:  78.56025039123631  %\n",
      "Percentage:  78.61241523213354  %\n",
      "Percentage:  78.66458007303078  %\n",
      "Percentage:  78.71674491392801  %\n",
      "Percentage:  78.76890975482524  %\n",
      "Percentage:  78.82107459572248  %\n",
      "Percentage:  78.87323943661971  %\n",
      "Percentage:  78.92540427751695  %\n",
      "Percentage:  78.9775691184142  %\n",
      "Percentage:  79.02973395931143  %\n",
      "Percentage:  79.08189880020866  %\n",
      "Percentage:  79.1340636411059  %\n",
      "Percentage:  79.18622848200313  %\n",
      "Percentage:  79.23839332290036  %\n",
      "Percentage:  79.2905581637976  %\n",
      "Percentage:  79.34272300469483  %\n",
      "Percentage:  79.39488784559207  %\n",
      "Percentage:  79.4470526864893  %\n",
      "Percentage:  79.49921752738655  %\n",
      "Percentage:  79.55138236828378  %\n",
      "Percentage:  79.60354720918102  %\n",
      "Percentage:  79.65571205007825  %\n",
      "Percentage:  79.70787689097548  %\n",
      "Percentage:  79.76004173187272  %\n",
      "Percentage:  79.81220657276995  %\n",
      "Percentage:  79.86437141366719  %\n",
      "Percentage:  79.91653625456442  %\n",
      "Percentage:  79.96870109546165  %\n",
      "Percentage:  80.02086593635889  %\n",
      "Percentage:  80.07303077725614  %\n",
      "Percentage:  80.12519561815337  %\n",
      "Percentage:  80.1773604590506  %\n",
      "Percentage:  80.22952529994784  %\n",
      "Percentage:  80.28169014084507  %\n",
      "Percentage:  80.3338549817423  %\n",
      "Percentage:  80.38601982263954  %\n",
      "Percentage:  80.43818466353677  %\n",
      "Percentage:  80.49034950443401  %\n",
      "Percentage:  80.54251434533124  %\n",
      "Percentage:  80.59467918622848  %\n",
      "Percentage:  80.64684402712572  %\n",
      "Percentage:  80.69900886802296  %\n",
      "Percentage:  80.75117370892019  %\n",
      "Percentage:  80.80333854981743  %\n",
      "Percentage:  80.85550339071466  %\n",
      "Percentage:  80.9076682316119  %\n",
      "Percentage:  80.95983307250913  %\n",
      "Percentage:  81.01199791340636  %\n",
      "Percentage:  81.0641627543036  %\n",
      "Percentage:  81.11632759520083  %\n",
      "Percentage:  81.16849243609806  %\n",
      "Percentage:  81.22065727699531  %\n",
      "Percentage:  81.27282211789255  %\n",
      "Percentage:  81.32498695878978  %\n",
      "Percentage:  81.37715179968701  %\n",
      "Percentage:  81.42931664058425  %\n",
      "Percentage:  81.48148148148148  %\n",
      "Percentage:  81.53364632237871  %\n",
      "Percentage:  81.58581116327595  %\n",
      "Percentage:  81.63797600417318  %\n",
      "Percentage:  81.69014084507042  %\n",
      "Percentage:  81.74230568596766  %\n",
      "Percentage:  81.7944705268649  %\n",
      "Percentage:  81.84663536776213  %\n",
      "Percentage:  81.89880020865937  %\n",
      "Percentage:  81.9509650495566  %\n",
      "Percentage:  82.00312989045383  %\n",
      "Percentage:  82.05529473135107  %\n",
      "Percentage:  82.1074595722483  %\n",
      "Percentage:  82.15962441314554  %\n",
      "Percentage:  82.21178925404277  %\n",
      "Percentage:  82.26395409494  %\n",
      "Percentage:  82.31611893583725  %\n",
      "Percentage:  82.36828377673449  %\n",
      "Percentage:  82.42044861763172  %\n",
      "Percentage:  82.47261345852895  %\n",
      "Percentage:  82.52477829942619  %\n",
      "Percentage:  82.57694314032342  %\n",
      "Percentage:  82.62910798122066  %\n",
      "Percentage:  82.68127282211789  %\n",
      "Percentage:  82.73343766301512  %\n",
      "Percentage:  82.78560250391236  %\n",
      "Percentage:  82.83776734480959  %\n",
      "Percentage:  82.88993218570684  %\n",
      "Percentage:  82.94209702660407  %\n",
      "Percentage:  82.99426186750131  %\n",
      "Percentage:  83.04642670839854  %\n",
      "Percentage:  83.09859154929578  %\n",
      "Percentage:  83.15075639019301  %\n",
      "Percentage:  83.20292123109024  %\n",
      "Percentage:  83.25508607198748  %\n",
      "Percentage:  83.30725091288471  %\n",
      "Percentage:  83.35941575378195  %\n",
      "Percentage:  83.41158059467918  %\n",
      "Percentage:  83.46374543557643  %\n",
      "Percentage:  83.51591027647366  %\n",
      "Percentage:  83.5680751173709  %\n",
      "Percentage:  83.62023995826813  %\n",
      "Percentage:  83.67240479916536  %\n",
      "Percentage:  83.7245696400626  %\n",
      "Percentage:  83.77673448095983  %\n",
      "Percentage:  83.82889932185707  %\n",
      "Percentage:  83.8810641627543  %\n",
      "Percentage:  83.93322900365153  %\n",
      "Percentage:  83.98539384454877  %\n",
      "Percentage:  84.03755868544602  %\n",
      "Percentage:  84.08972352634325  %\n",
      "Percentage:  84.14188836724048  %\n",
      "Percentage:  84.19405320813772  %\n",
      "Percentage:  84.24621804903495  %\n",
      "Percentage:  84.29838288993218  %\n",
      "Percentage:  84.35054773082942  %\n",
      "Percentage:  84.40271257172665  %\n",
      "Percentage:  84.45487741262389  %\n",
      "Percentage:  84.50704225352112  %\n",
      "Percentage:  84.55920709441837  %\n",
      "Percentage:  84.6113719353156  %\n",
      "Percentage:  84.66353677621284  %\n",
      "Percentage:  84.71570161711007  %\n",
      "Percentage:  84.7678664580073  %\n",
      "Percentage:  84.82003129890454  %\n",
      "Percentage:  84.87219613980177  %\n",
      "Percentage:  84.924360980699  %\n",
      "Percentage:  84.97652582159624  %\n",
      "Percentage:  85.02869066249347  %\n",
      "Percentage:  85.08085550339071  %\n",
      "Percentage:  85.13302034428796  %\n",
      "Percentage:  85.18518518518519  %\n",
      "Percentage:  85.23735002608242  %\n",
      "Percentage:  85.28951486697966  %\n",
      "Percentage:  85.34167970787689  %\n",
      "Percentage:  85.39384454877413  %\n",
      "Percentage:  85.44600938967136  %\n",
      "Percentage:  85.4981742305686  %\n",
      "Percentage:  85.55033907146583  %\n",
      "Percentage:  85.60250391236306  %\n",
      "Percentage:  85.6546687532603  %\n",
      "Percentage:  85.70683359415754  %\n",
      "Percentage:  85.75899843505478  %\n",
      "Percentage:  85.81116327595201  %\n",
      "Percentage:  85.86332811684925  %\n",
      "Percentage:  85.91549295774648  %\n",
      "Percentage:  85.96765779864371  %\n",
      "Percentage:  86.01982263954095  %\n",
      "Percentage:  86.07198748043818  %\n",
      "Percentage:  86.12415232133542  %\n",
      "Percentage:  86.17631716223265  %\n",
      "Percentage:  86.22848200312988  %\n",
      "Percentage:  86.28064684402713  %\n",
      "Percentage:  86.33281168492437  %\n",
      "Percentage:  86.3849765258216  %\n",
      "Percentage:  86.43714136671883  %\n",
      "Percentage:  86.48930620761607  %\n",
      "Percentage:  86.5414710485133  %\n",
      "Percentage:  86.59363588941054  %\n",
      "Percentage:  86.64580073030777  %\n",
      "Percentage:  86.697965571205  %\n",
      "Percentage:  86.75013041210224  %\n",
      "Percentage:  86.80229525299949  %\n",
      "Percentage:  86.85446009389672  %\n",
      "Percentage:  86.90662493479395  %\n",
      "Percentage:  86.95878977569119  %\n",
      "Percentage:  87.01095461658842  %\n",
      "Percentage:  87.06311945748566  %\n",
      "Percentage:  87.11528429838289  %\n",
      "Percentage:  87.16744913928012  %\n",
      "Percentage:  87.21961398017736  %\n",
      "Percentage:  87.27177882107459  %\n",
      "Percentage:  87.32394366197182  %\n",
      "Percentage:  87.37610850286907  %\n",
      "Percentage:  87.4282733437663  %\n",
      "Percentage:  87.48043818466354  %\n",
      "Percentage:  87.53260302556077  %\n",
      "Percentage:  87.58476786645801  %\n",
      "Percentage:  87.63693270735524  %\n",
      "Percentage:  87.68909754825248  %\n",
      "Percentage:  87.74126238914971  %\n",
      "Percentage:  87.79342723004694  %\n",
      "Percentage:  87.84559207094418  %\n",
      "Percentage:  87.89775691184141  %\n",
      "Percentage:  87.94992175273866  %\n",
      "Percentage:  88.0020865936359  %\n",
      "Percentage:  88.05425143453313  %\n",
      "Percentage:  88.10641627543036  %\n",
      "Percentage:  88.1585811163276  %\n",
      "Percentage:  88.21074595722483  %\n",
      "Percentage:  88.26291079812206  %\n",
      "Percentage:  88.3150756390193  %\n",
      "Percentage:  88.36724047991653  %\n",
      "Percentage:  88.41940532081377  %\n",
      "Percentage:  88.471570161711  %\n",
      "Percentage:  88.52373500260825  %\n",
      "Percentage:  88.57589984350548  %\n",
      "Percentage:  88.62806468440272  %\n",
      "Percentage:  88.68022952529995  %\n",
      "Percentage:  88.73239436619718  %\n",
      "Percentage:  88.78455920709442  %\n",
      "Percentage:  88.83672404799165  %\n",
      "Percentage:  88.88888888888889  %\n",
      "Percentage:  88.94105372978612  %\n",
      "Percentage:  88.99321857068335  %\n",
      "Percentage:  89.0453834115806  %\n",
      "Percentage:  89.09754825247784  %\n",
      "Percentage:  89.14971309337507  %\n",
      "Percentage:  89.2018779342723  %\n",
      "Percentage:  89.25404277516954  %\n",
      "Percentage:  89.30620761606677  %\n",
      "Percentage:  89.358372456964  %\n",
      "Percentage:  89.41053729786124  %\n",
      "Percentage:  89.46270213875847  %\n",
      "Percentage:  89.51486697965571  %\n",
      "Percentage:  89.56703182055294  %\n",
      "Percentage:  89.61919666145019  %\n",
      "Percentage:  89.67136150234742  %\n",
      "Percentage:  89.72352634324466  %\n",
      "Percentage:  89.77569118414189  %\n",
      "Percentage:  89.82785602503913  %\n",
      "Percentage:  89.88002086593636  %\n",
      "Percentage:  89.9321857068336  %\n",
      "Percentage:  89.98435054773083  %\n",
      "Percentage:  90.03651538862806  %\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Percentage:  90.0886802295253  %\n",
      "Percentage:  90.14084507042253  %\n",
      "Percentage:  90.19300991131978  %\n",
      "Percentage:  90.24517475221701  %\n",
      "Percentage:  90.29733959311424  %\n",
      "Percentage:  90.34950443401148  %\n",
      "Percentage:  90.40166927490871  %\n",
      "Percentage:  90.45383411580595  %\n",
      "Percentage:  90.50599895670318  %\n",
      "Percentage:  90.55816379760041  %\n",
      "Percentage:  90.61032863849765  %\n",
      "Percentage:  90.66249347939488  %\n",
      "Percentage:  90.71465832029212  %\n",
      "Percentage:  90.76682316118936  %\n",
      "Percentage:  90.8189880020866  %\n",
      "Percentage:  90.87115284298383  %\n",
      "Percentage:  90.92331768388107  %\n",
      "Percentage:  90.9754825247783  %\n",
      "Percentage:  91.02764736567553  %\n",
      "Percentage:  91.07981220657277  %\n",
      "Percentage:  91.13197704747  %\n",
      "Percentage:  91.18414188836724  %\n",
      "Percentage:  91.23630672926447  %\n",
      "Percentage:  91.2884715701617  %\n",
      "Percentage:  91.34063641105895  %\n",
      "Percentage:  91.39280125195619  %\n",
      "Percentage:  91.44496609285342  %\n",
      "Percentage:  91.49713093375065  %\n",
      "Percentage:  91.54929577464789  %\n",
      "Percentage:  91.60146061554512  %\n",
      "Percentage:  91.65362545644236  %\n",
      "Percentage:  91.70579029733959  %\n",
      "Percentage:  91.75795513823682  %\n",
      "Percentage:  91.81011997913406  %\n",
      "Percentage:  91.8622848200313  %\n",
      "Percentage:  91.91444966092854  %\n",
      "Percentage:  91.96661450182577  %\n",
      "Percentage:  92.01877934272301  %\n",
      "Percentage:  92.07094418362024  %\n",
      "Percentage:  92.12310902451748  %\n",
      "Percentage:  92.17527386541471  %\n",
      "Percentage:  92.22743870631194  %\n",
      "Percentage:  92.27960354720918  %\n",
      "Percentage:  92.33176838810641  %\n",
      "Percentage:  92.38393322900365  %\n",
      "Percentage:  92.4360980699009  %\n",
      "Percentage:  92.48826291079813  %\n",
      "Percentage:  92.54042775169536  %\n",
      "Percentage:  92.5925925925926  %\n",
      "Percentage:  92.64475743348983  %\n",
      "Percentage:  92.69692227438706  %\n",
      "Percentage:  92.7490871152843  %\n",
      "Percentage:  92.80125195618153  %\n",
      "Percentage:  92.85341679707876  %\n",
      "Percentage:  92.905581637976  %\n",
      "Percentage:  92.95774647887323  %\n",
      "Percentage:  93.00991131977048  %\n",
      "Percentage:  93.06207616066771  %\n",
      "Percentage:  93.11424100156495  %\n",
      "Percentage:  93.16640584246218  %\n",
      "Percentage:  93.21857068335942  %\n",
      "Percentage:  93.27073552425665  %\n",
      "Percentage:  93.32290036515388  %\n",
      "Percentage:  93.37506520605112  %\n",
      "Percentage:  93.42723004694835  %\n",
      "Percentage:  93.47939488784559  %\n",
      "Percentage:  93.53155972874282  %\n",
      "Percentage:  93.58372456964007  %\n",
      "Percentage:  93.6358894105373  %\n",
      "Percentage:  93.68805425143454  %\n",
      "Percentage:  93.74021909233177  %\n",
      "Percentage:  93.792383933229  %\n",
      "Percentage:  93.84454877412624  %\n",
      "Percentage:  93.89671361502347  %\n",
      "Percentage:  93.9488784559207  %\n",
      "Percentage:  94.00104329681794  %\n",
      "Percentage:  94.05320813771517  %\n",
      "Percentage:  94.10537297861242  %\n",
      "Percentage:  94.15753781950966  %\n",
      "Percentage:  94.20970266040689  %\n",
      "Percentage:  94.26186750130412  %\n",
      "Percentage:  94.31403234220136  %\n",
      "Percentage:  94.36619718309859  %\n",
      "Percentage:  94.41836202399583  %\n",
      "Percentage:  94.47052686489306  %\n",
      "Percentage:  94.5226917057903  %\n",
      "Percentage:  94.57485654668753  %\n",
      "Percentage:  94.62702138758476  %\n",
      "Percentage:  94.67918622848201  %\n",
      "Percentage:  94.73135106937924  %\n",
      "Percentage:  94.78351591027648  %\n",
      "Percentage:  94.83568075117371  %\n",
      "Percentage:  94.88784559207095  %\n",
      "Percentage:  94.94001043296818  %\n",
      "Percentage:  94.99217527386541  %\n",
      "Percentage:  95.04434011476265  %\n",
      "Percentage:  95.09650495565988  %\n",
      "Percentage:  95.14866979655712  %\n",
      "Percentage:  95.20083463745435  %\n",
      "Percentage:  95.2529994783516  %\n",
      "Percentage:  95.30516431924883  %\n",
      "Percentage:  95.35732916014607  %\n",
      "Percentage:  95.4094940010433  %\n",
      "Percentage:  95.46165884194053  %\n",
      "Percentage:  95.51382368283777  %\n",
      "Percentage:  95.565988523735  %\n",
      "Percentage:  95.61815336463224  %\n",
      "Percentage:  95.67031820552947  %\n",
      "Percentage:  95.7224830464267  %\n",
      "Percentage:  95.77464788732394  %\n",
      "Percentage:  95.82681272822119  %\n",
      "Percentage:  95.87897756911842  %\n",
      "Percentage:  95.93114241001565  %\n",
      "Percentage:  95.98330725091289  %\n",
      "Percentage:  96.03547209181012  %\n",
      "Percentage:  96.08763693270735  %\n",
      "Percentage:  96.13980177360459  %\n",
      "Percentage:  96.19196661450182  %\n",
      "Percentage:  96.24413145539906  %\n",
      "Percentage:  96.29629629629629  %\n",
      "Percentage:  96.34846113719354  %\n",
      "Percentage:  96.40062597809077  %\n",
      "Percentage:  96.452790818988  %\n",
      "Percentage:  96.50495565988524  %\n",
      "Percentage:  96.55712050078247  %\n",
      "Percentage:  96.60928534167971  %\n",
      "Percentage:  96.66145018257694  %\n",
      "Percentage:  96.71361502347418  %\n",
      "Percentage:  96.76577986437141  %\n",
      "Percentage:  96.81794470526864  %\n",
      "Percentage:  96.87010954616588  %\n",
      "Percentage:  96.92227438706313  %\n",
      "Percentage:  96.97443922796036  %\n",
      "Percentage:  97.0266040688576  %\n",
      "Percentage:  97.07876890975483  %\n",
      "Percentage:  97.13093375065206  %\n",
      "Percentage:  97.1830985915493  %\n",
      "Percentage:  97.23526343244653  %\n",
      "Percentage:  97.28742827334376  %\n",
      "Percentage:  97.339593114241  %\n",
      "Percentage:  97.39175795513823  %\n",
      "Percentage:  97.44392279603547  %\n",
      "Percentage:  97.49608763693271  %\n",
      "Percentage:  97.54825247782995  %\n",
      "Percentage:  97.60041731872718  %\n",
      "Percentage:  97.65258215962442  %\n",
      "Percentage:  97.70474700052165  %\n",
      "Percentage:  97.75691184141888  %\n",
      "Percentage:  97.80907668231612  %\n",
      "Percentage:  97.86124152321335  %\n",
      "Percentage:  97.91340636411059  %\n",
      "Percentage:  97.96557120500782  %\n",
      "Percentage:  98.01773604590505  %\n",
      "Percentage:  98.0699008868023  %\n",
      "Percentage:  98.12206572769954  %\n",
      "Percentage:  98.17423056859677  %\n",
      "Percentage:  98.226395409494  %\n",
      "Percentage:  98.27856025039124  %\n",
      "Percentage:  98.33072509128847  %\n",
      "Percentage:  98.3828899321857  %\n",
      "Percentage:  98.43505477308294  %\n",
      "Percentage:  98.48721961398017  %\n",
      "Percentage:  98.5393844548774  %\n",
      "Percentage:  98.59154929577464  %\n",
      "Percentage:  98.64371413667189  %\n",
      "Percentage:  98.69587897756912  %\n",
      "Percentage:  98.74804381846636  %\n",
      "Percentage:  98.80020865936359  %\n",
      "Percentage:  98.85237350026082  %\n",
      "Percentage:  98.90453834115806  %\n",
      "Percentage:  98.95670318205529  %\n",
      "Percentage:  99.00886802295253  %\n",
      "Percentage:  99.06103286384976  %\n",
      "Percentage:  99.113197704747  %\n",
      "Percentage:  99.16536254564424  %\n",
      "Percentage:  99.21752738654148  %\n",
      "Percentage:  99.26969222743871  %\n",
      "Percentage:  99.32185706833594  %\n",
      "Percentage:  99.37402190923318  %\n",
      "Percentage:  99.42618675013041  %\n",
      "Percentage:  99.47835159102765  %\n",
      "Percentage:  99.53051643192488  %\n",
      "Percentage:  99.58268127282211  %\n",
      "Percentage:  99.63484611371935  %\n",
      "Percentage:  99.68701095461658  %\n",
      "Percentage:  99.73917579551383  %\n",
      "Percentage:  99.79134063641106  %\n",
      "Percentage:  99.8435054773083  %\n",
      "Percentage:  99.89567031820553  %\n",
      "Percentage:  99.94783515910277  %\n"
     ]
    }
   ],
   "source": [
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "import collections\n",
    "import math\n",
    "import os\n",
    "import random\n",
    "import zipfile\n",
    "import sys\n",
    "import time\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from six.moves import urllib\n",
    "from six.moves import xrange  # pylint: disable=redefined-builtin\n",
    "import tensorflow as tf\n",
    "from tensorflow.contrib.tensorboard.plugins import projector\n",
    "\n",
    "\n",
    "###### USER PARAMETERS ########\n",
    "# input data file\n",
    "input_filename = \"./corpus_example.csv\"\n",
    "split_sign = \",\"\n",
    "# path to store embeddings and models\n",
    "save_embeddings = \"corpus_embeddings\"\n",
    "min_oc = 5\n",
    "embedding_size = 100 # Size of the embedding\n",
    "num_epochs = float(1000)\n",
    "###### END USER PARMETERS #####\n",
    "\n",
    "\n",
    "###### Parameters for the Embedding ####\n",
    "batch_size = 256     # Consider for each learning step X flows\n",
    "num_sampled = 32\n",
    "    # Number of training epochs\n",
    "valid_size = 16     # Random set of words to evaluate similarity on.\n",
    "valid_window = 100  # Only pick dev samples in the head of the distribution.\n",
    "valid_examples = np.random.choice(valid_window, valid_size, replace=False)\n",
    "###### END PARAMETERS FOR THE EMBEDDING #####\n",
    "\n",
    "\n",
    "####### FUNCTIONS ###############\n",
    "\n",
    "# Reads the file with the preprocessed flow-based data and returns a list with all \"words\"\n",
    "# The file must have the following structure:\n",
    "#   srcip, context_attribute1, context_attribute_2, ...\n",
    "def read_file_and_convert_to_list(input_filename):\n",
    "  # Stores the number of attributes (target and context) for each flow\n",
    "  global num_elems\n",
    "  # Read the file line by line\n",
    "  with open(input_filename, 'r') as f:\n",
    "    data = tf.compat.as_str(f.read()).splitlines()\n",
    "    print(data)\n",
    "    num_elems = len(data[0].split(\",\"))\n",
    "  # Convert to list\n",
    "  res = []\n",
    "  for line in data:\n",
    "      for word in line.split(\",\"):\n",
    "          res.append(word.strip())\n",
    "  return res, len(data)\n",
    "\n",
    "\n",
    "# This functions builds the data set (all values are converted to ids)\n",
    "def build_dataset(words):\n",
    "    tmp = []\n",
    "    tmp.extend(collections.Counter(words).most_common())\n",
    "    \n",
    "    #tmp에 단어별 빈도 리스트 저장\n",
    "    \n",
    "    #size = tmp의 요소개수\n",
    "    size = len(tmp)\n",
    "    \n",
    "    for until in range(len(tmp)):\n",
    "        #d = tmp[n]\n",
    "        #unique word\n",
    "        d = tmp[until]\n",
    "        \n",
    "        #c = d[1] //단어의 빈도\n",
    "        c = d[1]\n",
    "        \n",
    "        if c < min_oc:\n",
    "            size = until+1+2\n",
    "            break\n",
    "\n",
    "     # Count the frequency of all values\n",
    "    count = [['UNKOWN_IP',-1],['UNKOWN_dPt',-1]]\n",
    "    count.extend(collections.Counter(words).most_common(size-2))\n",
    "\n",
    "    # Build the dictionary\n",
    "    # e.g. (\"129.3.3.3\" , 2)\n",
    "    dictionary = dict()\n",
    "    for word, _ in count:\n",
    "        dictionary[word] = len(dictionary)\n",
    "    # Build the reverse dictionary\n",
    "    reverse_dictionary = dict(zip(dictionary.values(),dictionary.keys()))\n",
    "\n",
    "    # Transfer the list of words to a list of IDs\n",
    "    data = list()\n",
    "    unk_count_ip = 0\n",
    "    unk_count_dpt = 0\n",
    "    for word in words:\n",
    "        if word in dictionary:\n",
    "            index = dictionary[word]\n",
    "        else:\n",
    "            if len(word.split('.')) == 4:\n",
    "                index = 0\n",
    "                unk_count_ip = unk_count_ip + 1\n",
    "            else:\n",
    "                index = 1\n",
    "                unk_count_dpt = unk_count_dpt + 1\n",
    "        data.append(index)\n",
    "\n",
    "    count[0][1] = unk_count_ip\n",
    "    count[1][1] = unk_count_dpt\n",
    "\n",
    "    return data, count, dictionary, reverse_dictionary, size\n",
    "\n",
    "\n",
    "\n",
    "# Generates the next batch\n",
    "def generate_batch():\n",
    "    # use the global data_index variable (recent pointer)\n",
    "    global data_index\n",
    "    # create variables for the training sets\n",
    "    batch = np.ndarray(shape=(training_pairs),dtype=np.int32)\n",
    "    labels= np.ndarray(shape=(training_pairs,1), dtype=np.int32)\n",
    "\n",
    "    # Read batch_size flows and create training sets\n",
    "    for i in range(batch_size):\n",
    "        for j in range(1,num_elems):\n",
    "            batch[i*pairs+j-1] = data[data_index]\n",
    "            labels[i*pairs+j-1,0] = data[data_index+j]\n",
    "\n",
    "        batch[i*pairs+(num_elems)-1] = data[data_index+2]\n",
    "        labels[i*pairs+(num_elems)-1,0] = data[data_index+1]\n",
    "\n",
    "        batch[i*pairs+(num_elems)] = data[data_index+3]\n",
    "        labels[i*pairs+(num_elems),0] = data[data_index+1]\n",
    "        # Check if end of training list is reached\n",
    "        data_index = (data_index + num_elems) % len_value\n",
    "\n",
    "    return batch, labels\n",
    "\n",
    "######## END FUNCTIONS #######\n",
    "\n",
    "#### Global variales\n",
    "# Recent pointer for data\n",
    "data_index = 0\n",
    "# Number of attributes per line\n",
    "num_elems = -1\n",
    "#### End Global variales\n",
    "loss_list = []\n",
    "\n",
    "#### STEP 1: Read the file\n",
    "print(\"Step 1: Read the file\")\n",
    "input_values, num_lines = read_file_and_convert_to_list(input_filename)\n",
    "len_value = len(input_values)\n",
    "# define the number of of extractable pairs per flow\n",
    "pairs = num_elems - 1 + 2\n",
    "# The number of training pers created per flow\n",
    "training_pairs = pairs * batch_size\n",
    "\n",
    "\n",
    "#### Step 2: Build the data set\n",
    "print(\"Step 2: Build the data set\")\n",
    "data, count, dictionary, reverse_dictionary, vocabluary_size = build_dataset(input_values)\n",
    "print(\"Voc: --- \", len(dictionary))\n",
    "print(\"VOC: \", vocabluary_size)\n",
    "generate_batch()\n",
    "\n",
    "\n",
    "#### Step 3: Build the model\n",
    "print(\"Step 3: Build the model\")\n",
    "\n",
    "graph = tf.Graph()\n",
    "\n",
    "with graph.as_default():\n",
    "    # Input data\n",
    "    train_inputs = tf.placeholder(tf.int32,shape=[training_pairs])\n",
    "    train_labels = tf.placeholder(tf.int32,shape=[training_pairs,1])\n",
    "    valid_dataset= tf.constant(valid_examples, dtype=tf.int32)\n",
    "\n",
    "    with tf.device('/gpu:0'):\n",
    "        # Look up embedding for inputs\n",
    "        embeddings = tf.Variable(tf.random_uniform([vocabluary_size,embedding_size],-1.0,1.0))\n",
    "        embed = tf.nn.embedding_lookup(embeddings,train_inputs)\n",
    "\n",
    "        # Construct the variables for NCE loss\n",
    "        nce_weights = tf.Variable(\n",
    "            tf.truncated_normal([vocabluary_size,embedding_size],stddev=1.0 / math.sqrt(embedding_size)) )\n",
    "        nce_biases = tf.Variable(tf.zeros([vocabluary_size]))\n",
    "\n",
    "        # Compute the average NCE loss for the batch.\n",
    "        # tf.nce_loss automatically draws a new sample of the negative labels each\n",
    "        # time we evaluate the loss.\n",
    "        loss = tf.reduce_mean(\n",
    "            tf.nn.nce_loss(weights=nce_weights,\n",
    "                     biases=nce_biases,\n",
    "                     labels=train_labels,\n",
    "                     inputs=embed,\n",
    "                     num_sampled=num_sampled,\n",
    "                     num_classes=vocabluary_size))\n",
    "\n",
    "        # Construct the SGD optimizer using a learning rate of 1.0\n",
    "        optimizer = tf.train.GradientDescentOptimizer(0.1).minimize(loss)\n",
    "\n",
    "        # compute\n",
    "        norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True))\n",
    "        normalized_embeddings = embeddings / norm\n",
    "\n",
    "        # init\n",
    "        init = tf.global_variables_initializer()\n",
    "\n",
    "\n",
    "# Step 4: Train the model\n",
    "print(\"Step 4: Train the model\")\n",
    "\n",
    "# calculate the number of training steps\n",
    "num_steps = int(num_lines / batch_size * num_epochs)\n",
    "config = tf.ConfigProto(allow_soft_placement = True)\n",
    "\n",
    "sess = tf.Session(graph=graph, config=config)\n",
    "with tf.Session(graph=graph, config=config) as session:\n",
    "    # Init\n",
    "    init.run()\n",
    "    print(\"Step 4.1: Initialized\")\n",
    "\n",
    "    average_loss = 0\n",
    "    for step in xrange(num_steps):\n",
    "        batch_inputs, batch_labels = generate_batch()\n",
    "        feed_dict = {train_inputs: batch_inputs, train_labels: batch_labels}\n",
    "\n",
    "        # We perform one update step by evaluating the optimizer op (including it\n",
    "        # in the list of returned values for session.run()\n",
    "        _, loss_val = session.run([optimizer, loss], feed_dict=feed_dict)\n",
    "        average_loss += loss_val\n",
    "\n",
    "        if step % 2000 == 0:\n",
    "            if step > 0:\n",
    "                average_loss /= 2000\n",
    "            print(\"Average loss at step\", step, \": \", average_loss, \" from \", num_steps ,\" steps.\")\n",
    "            average_loss = 0\n",
    "        percentage = (step*100)/num_steps\n",
    "        print(\"Percentage: \",percentage,\" %\")\n",
    "\n",
    "        loss_list.append(loss_val)\n",
    "    # Save the embedding\n",
    "    to_save = session.run(normalized_embeddings)\n",
    "    target = save_embeddings\n",
    "    dataframe = pd.DataFrame(data=to_save[0:,0:])\n",
    "    vals = []\n",
    "    for u in range(0,len(to_save)):\n",
    "        vals.append(reverse_dictionary.get(u))\n",
    "    dataframe['values'] = vals\n",
    "    dataframe.to_csv(target,sep=\",\")\n",
    "    fobi = pd.DataFrame(loss_list)\n",
    "    fobi.to_csv(save_embeddings)\n",
    "    \n",
    "    \n",
    "    \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "Dimensions must be equal, but are 2 and 32 for 'add' (op: 'Add') with input shapes: [32,2], [32].",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mInvalidArgumentError\u001b[0m                      Traceback (most recent call last)",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/common_shapes.py\u001b[0m in \u001b[0;36m_call_cpp_shape_fn_impl\u001b[0;34m(op, input_tensors_needed, input_tensors_as_shapes_needed, require_shape_fn)\u001b[0m\n\u001b[1;32m    653\u001b[0m           \u001b[0mgraph_def_version\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnode_def_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_shapes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_tensors\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 654\u001b[0;31m           input_tensors_as_shapes, status)\n\u001b[0m\u001b[1;32m    655\u001b[0m   \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInvalidArgumentError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/contextlib.py\u001b[0m in \u001b[0;36m__exit__\u001b[0;34m(self, type, value, traceback)\u001b[0m\n\u001b[1;32m     87\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 88\u001b[0;31m                 \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     89\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mStopIteration\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py\u001b[0m in \u001b[0;36mraise_exception_on_not_ok_status\u001b[0;34m()\u001b[0m\n\u001b[1;32m    465\u001b[0m           \u001b[0mcompat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_text\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpywrap_tensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_Message\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstatus\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 466\u001b[0;31m           pywrap_tensorflow.TF_GetCode(status))\n\u001b[0m\u001b[1;32m    467\u001b[0m   \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mInvalidArgumentError\u001b[0m: Dimensions must be equal, but are 2 and 32 for 'add' (op: 'Add') with input shapes: [32,2], [32].",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-43-7e83160be9fe>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvectors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnce_weights\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mnce_biases\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mONE_HOT_DIM\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;31m# word embedding will be 2 dimension for 2d visualization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mEMBEDDING_DIM\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/variables.py\u001b[0m in \u001b[0;36m_run_op\u001b[0;34m(a, *args)\u001b[0m\n\u001b[1;32m    703\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_run_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    704\u001b[0m       \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 705\u001b[0;31m       \u001b[0;32mreturn\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moperator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_AsTensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    706\u001b[0m     \u001b[0;31m# Propagate __doc__ to wrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    707\u001b[0m     \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py\u001b[0m in \u001b[0;36mbinary_op_wrapper\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m    863\u001b[0m           \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    864\u001b[0m             \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 865\u001b[0;31m       \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    866\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    867\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0mbinary_op_wrapper_sparse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msp_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/gen_math_ops.py\u001b[0m in \u001b[0;36madd\u001b[0;34m(x, y, name)\u001b[0m\n\u001b[1;32m     78\u001b[0m     \u001b[0mA\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mHas\u001b[0m \u001b[0mthe\u001b[0m \u001b[0msame\u001b[0m \u001b[0mtype\u001b[0m \u001b[0;32mas\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mx\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     79\u001b[0m   \"\"\"\n\u001b[0;32m---> 80\u001b[0;31m   \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_op_def_lib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Add\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     81\u001b[0m   \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     82\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py\u001b[0m in \u001b[0;36mapply_op\u001b[0;34m(self, op_type_name, name, **keywords)\u001b[0m\n\u001b[1;32m    765\u001b[0m         op = g.create_op(op_type_name, inputs, output_types, name=scope,\n\u001b[1;32m    766\u001b[0m                          \u001b[0minput_types\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_types\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mattrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mattr_protos\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 767\u001b[0;31m                          op_def=op_def)\n\u001b[0m\u001b[1;32m    768\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0moutput_structure\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    769\u001b[0m           \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36mcreate_op\u001b[0;34m(self, op_type, inputs, dtypes, input_types, name, attrs, op_def, compute_shapes, compute_device)\u001b[0m\n\u001b[1;32m   2630\u001b[0m                     original_op=self._default_original_op, op_def=op_def)\n\u001b[1;32m   2631\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mcompute_shapes\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2632\u001b[0;31m       \u001b[0mset_shapes_for_outputs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2633\u001b[0m     \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_add_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2634\u001b[0m     \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_record_op_seen_by_control_dependencies\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36mset_shapes_for_outputs\u001b[0;34m(op)\u001b[0m\n\u001b[1;32m   1909\u001b[0m       \u001b[0mshape_func\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_call_cpp_shape_fn_and_require_op\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1910\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1911\u001b[0;31m   \u001b[0mshapes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mshape_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1912\u001b[0m   \u001b[0;32mif\u001b[0m \u001b[0mshapes\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1913\u001b[0m     raise RuntimeError(\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36mcall_with_requiring\u001b[0;34m(op)\u001b[0m\n\u001b[1;32m   1859\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1860\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0mcall_with_requiring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1861\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mcall_cpp_shape_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequire_shape_fn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1862\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1863\u001b[0m   \u001b[0m_call_cpp_shape_fn_and_require_op\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcall_with_requiring\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/common_shapes.py\u001b[0m in \u001b[0;36mcall_cpp_shape_fn\u001b[0;34m(op, require_shape_fn)\u001b[0m\n\u001b[1;32m    593\u001b[0m     res = _call_cpp_shape_fn_impl(op, input_tensors_needed,\n\u001b[1;32m    594\u001b[0m                                   \u001b[0minput_tensors_as_shapes_needed\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 595\u001b[0;31m                                   require_shape_fn)\n\u001b[0m\u001b[1;32m    596\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    597\u001b[0m       \u001b[0;31m# Handles the case where _call_cpp_shape_fn_impl calls unknown_shape(op).\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/common_shapes.py\u001b[0m in \u001b[0;36m_call_cpp_shape_fn_impl\u001b[0;34m(op, input_tensors_needed, input_tensors_as_shapes_needed, require_shape_fn)\u001b[0m\n\u001b[1;32m    657\u001b[0m       \u001b[0mmissing_shape_fn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    658\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 659\u001b[0;31m       \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmessage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    660\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    661\u001b[0m   \u001b[0;32mif\u001b[0m \u001b[0mmissing_shape_fn\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mValueError\u001b[0m: Dimensions must be equal, but are 2 and 32 for 'add' (op: 'Add') with input shapes: [32,2], [32]."
     ]
    }
   ],
   "source": [
    "\n",
    "W1 = tf.Variable(tf.random_normal([ONE_HOT_DIM, EMBEDDING_DIM]))\n",
    "b1 = tf.Variable(tf.random_normal([1])) #bias\n",
    "hidden_layer = tf.add(tf.matmul(x,W1), b1)\n",
    "\n",
    "\n",
    "vectors = sess.run(nce_weights + nce_biases)\n",
    "ONE_HOT_DIM = len(data)\n",
    "\n",
    "# word embedding will be 2 dimension for 2d visualization\n",
    "EMBEDDING_DIM = 2\n",
    "\n",
    "# hidden layer: which represents word vector eventually\n",
    "#W1 = tf.Variable(tf.random_normal([ONE_HOT_DIM, embedding_size]))\n",
    "#b1 = tf.Variable(tf.random_normal([1])) #bias\n",
    "\n",
    "# Now the hidden layer (W1 + b1) is actually the word look up table\n",
    "#vectors = session.run(W1 + b1)\n",
    "#print(vectors)\n",
    "\n",
    "w2v_df = pd.DataFrame(to_save, columns = ['x1', 'x2'])\n",
    "w2v_df['word'] = fobi\n",
    "w2v_df = w2v_df[['word', 'x1', 'x2']]\n",
    "w2v_df\n",
    "\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Fixing random state for reproducibility\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "for words, x1, x2 in zip(w2v_df['word'], w2v_df['x1'], w2v_df['x2']):\n",
    "    ax.scatter(x1,x2,marker='o',c='blue')\n",
    "    ax.annotate(words, (x1,x2 ))\n",
    "    \n",
    "    \n",
    "PADDING = 1.0\n",
    "x_axis_min = np.amin(vectors, axis=0)[0] - PADDING\n",
    "y_axis_min = np.amin(vectors, axis=0)[1] - PADDING\n",
    "x_axis_max = np.amax(vectors, axis=0)[0] + PADDING\n",
    "y_axis_max = np.amax(vectors, axis=0)[1] + PADDING\n",
    " \n",
    "plt.xlim(x_axis_min,x_axis_max)\n",
    "plt.ylim(y_axis_min,y_axis_max)\n",
    "plt.rcParams[\"figure.figsize\"] = (10,10)\n",
    "plt.rcParams[\"figure.dpi\"] = (2)\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "plt.show()\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
